2010-12-23 3 views
1

Mögliche Duplizieren:
Can you add extension methods that you call like static methods?Erweiterungsmethoden als statische Klassenmethoden

Ich möchte NewSequentialGuid Funktion auf dem Guid Systemtyp hinzuzufügen, kann ich wie folgt so verwenden:

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; 
     } 
    } 
} 

Aber ich kann das nicht zum Laufen bringen, es funktioniert nur mit Instanzvariablen, jede Idee, wie man das zur erweiterten Klasse als statische Methode hinzufügt?

+1

Sie erkennen, dass diese * nicht * guids zurück, die in irgendeiner Weise sequentiell sind, nicht wahr? –

+0

Mein Verständnis ist, dass dies sequentielle Guides bis zum nächsten Neustart des Servers erstellt. – hazimdikenli

Antwort

4

Sie können nicht.

Sie wurden erstellt, um wie Instanzmethoden auszusehen, und können nicht als Klassenmethoden (statische Methoden) verwendet werden.

Von MSDN:

Erweiterungsmethoden sind eine spezielle Art von statischer Methode, aber sie genannt werden, als ob sie Instanzmethoden auf der erweiterten Art waren.

Und:

Verlängerungs-Verfahren sind als statische Methoden definiert, aber werden unter Verwendung von Instanzmethode Syntax aufgerufen.