2010-12-23 52 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

扩展方法是一种特殊的静态方法,但他们被称为好像他们是在扩展类型实例的方法。

和:

扩展方法被定义为静态方法,但通过使用实例方法语法调用。