2010-12-23 3 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를 반환하지 *이가하는 것을 깨닫게? –

+0

제 생각에 이것은 다음에 서버를 다시 시작할 때까지 순차적 인 guid를 만듭니다. – hazimdikenli

답변

4

수 없습니다.

이들은 인스턴스 메소드처럼 보이도록 작성되었으며 클래스 (정적) 메소드로 작동 할 수 없습니다. MSDN에서

:

확장 메서드는 정적 방법의 특별한 종류이다, 그러나이 확장 된 유형에 대한 인스턴스 메서드 인 것처럼 그들은이라고합니다.

: 그리고

확장 방법은 정적 방식으로 정의되지만 인스턴스 메소드 구문을 이용하여 호출된다.

관련 문제