2009-03-28 7 views
1

Angesichts einer Gruppe von Objekten, die einen gemeinsamen Satz von Eigenschaften und Methoden zur Unterstützung der gegebenen Domänenlogik haben, gibt es eine Möglichkeit, das Vorhandensein bestimmter statischer Methoden für diese Objekte zu erzwingen?erfordert das Vorhandensein von statischen Methoden in C#

Ich habe festgestellt, dass die Implementierung einer Schnittstelle dies nicht erreicht (Methoden sind nur Instanz) und dass statische Methoden nicht als überschreiben, virtuell oder abstrakt markiert werden können.

Vielen Dank im Voraus.

Antwort

4

No.

(Anmerkung: In F # können solche Einschränkungen ausdrücken "inline" Funktionen und "^" Typen (zB forall Typen T, wo T eine statische Methode ToInt (T hat), das gibt einen ‚int '). Der Compiler erweitert jeden Aufrufstandort automatisch auf den spezifischen Typ.)

+0

danke. Ich bin überzeugt. –

3

Die einzige Möglichkeit, einen Typ zu erzwingen, ein statisches Member zu haben, besteht darin, von ihm zu erben. Alle Typen werden die statischen Mitglieder haben, und wenn man sie auf einem abgeleiteten Typ muß außer Kraft setzen können Sie das „neue“ Schlüsselwort:

static void Main(string[] args) 
{ 
    Console.WriteLine(Base.Hello()); 
    Console.WriteLine(Derived.Hello()); 
    Console.Read(); 
    /* output will be: 
    Hello 
    World 
    */ 
} 

public class Base 
{ 
    public static object Hello() 
    { 
     return "Hello"; 
    } 
} 

public class Derived : Base 
{ 
    public static new object Hello() 
    { 
     return "World"; 
    } 
} 

Es ist nicht ganz dasselbe wie abstrakt/überschreiben, aber von einem Standpunkt des Verbrauchers , funktioniert ähnlich.