2010-12-23 101 views
1

可能重複:
Can you add extension methods that you call like static methods?擴展方法的靜態類的方法

我想對Guid系統類型添加NewSequentialGuid功能,這樣我就可以使用像以下:

Id = Guid.NewSequentialGuid()

namespace MyExtensions 
{ 
    public static class GuidExtensions 
    { 
     [DllImport("rpcrt4.dll", SetLastError = true)] 
     static extern int UuidCreateSequential(out Guid guid); 

     public static Guid NewSequentialGuid(this Guid guid) 
     { 
      const int RPC_S_OK = 0; 
      Guid g; 
      int hr = UuidCreateSequential(out g); 
      if (hr != RPC_S_OK) 
       throw new ApplicationException 
        ("UuidCreateSequential failed: " + hr); 
      return g; 
     } 
    } 
} 

但我不能得到這個工作,它只適用於實例變量,任何想法如何將這個擴展類作爲靜態方法?

+1

你意識到這樣做*不*返回以任何方式連續的GUID,對不對? – 2010-12-23 14:25:58

+0

我的理解是,這將創建連續的GUID,直到下次重新啓動服務器。 – hazimdikenli 2010-12-30 12:13:52

回答

4

你不能。

它們被創建爲看起來像實例方法,不能作爲類(靜態)方法工作。

MSDN

擴展方法是一種特殊的靜態方法,但他們被稱爲好像他們是在擴展類型實例的方法。

和:

擴展方法被定義爲靜態方法,但通過使用實例方法語法調用。