2009-03-18 10 views
1

Die Schnittstellen in Managed C++ sieht mir etwas seltsam, da sie statische Methoden und Mitglieder in ihnen erlauben. Zum Beispiel folgt eine gültige MC++ - Schnittstelle.Interface-Klasse in Managed C++

interface class statinterface 
{ 
    static int j; 
    void Method1(); 
    void Method2(); 

    static void Method3() 
    { 
     Console::WriteLine("Inside Method 3"); 
    } 

    static statinterface() 
    { 
     j = 4; 
    } 
}; 

Nun, meine Frage ist, was die in einer Schnittstelle Verwendung von statischen Methoden ist. Und was ist mit virtuellen Tabellen passiert? Was wird die virtuelle Tabelle der Klassen sein, die diese Schnittstelle implementieren? Es gibt viele Fragen, die einem einfallen. Dieser Typ von Klasse, d. H. Interface-Klasse, ist nicht äquivalent zu einer einfachen abstrakten Klasse, da wir hier keine Definition von nicht-statischen Methoden haben können.

Ich möchte nur die Weisheit der Statik in der Schnittstelle zu wissen. Dies ist sicherlich gegen OOP Prinzipien IMO.

Antwort

3

Der einfachste Weg, diese Frage zu beantworten, ist die Verwendung von .NET Reflector zum Untersuchen der aus dem Code generierten Assembly.

Ein VTable enthält immer nur virtuelle Funktionen, also wäre Statik einfach nicht enthalten.

Die Sprache heißt C++/CLI, nicht Managed C++ (das war etwas schlechtes aus dem Jahr 2002).

Das hat nichts mit den OOP-Prinzipien zu tun, die das Konzept einer reinen Schnittstelle ursprünglich nie beinhalteten.