So verlängern Sie die Schnittstelle, indem die Methode Namen?
Gegeben zwei Schnittstellen:
interface I1 {
int Foo();
}
interface I2 {
void Foo();
}
Einer Klasse:
class Test : I1, I2 {
int I1.Foo() {
Console.WriteLine("I1.Foo");
return default(int);
}
public void Foo() {
Console.WriteLine("I2.Foo");
}
}
Wie kann ich verlängern Sie die Schnittstelle I2
mit I1
indem Sie die Methoden mit dem Namen Foo
?
Habe ich versucht den folgenden code, aber es kann nicht kompiliert werden:
interface I1 {
int Foo();
}
interface I2 : I1 {
void I2.Foo();
}
class Test : I2 { /* same code */ }
Sie können nicht implementiert nichts in einem interface. Nur Deklarationen erlaubt sind.
Es ist nicht sonderlich hilfreich, ist aber sicherlich erlaubt. Sie wollen vermeiden, mit dem gleichen Namen, das macht es schwer für eine Klasse die Schnittstelle implementieren, und für niemanden, es zu benutzen.
Es ist nicht sonderlich hilfreich, ist aber sicherlich erlaubt. Sie wollen vermeiden, mit dem gleichen Namen, das macht es schwer für eine Klasse die Schnittstelle implementieren, und für niemanden, es zu benutzen.
InformationsquelleAutor Omar | 2012-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist unklar, in den Beispiel, was explizit deklarieren
I2.Foo()
in der Schnittstelle selbst erledigen würde, wenn es erlaubt ist. Die Spezifikation (en. 13.4.1) erlaubt es, die Struktur oder Klasse, die Implementierung einer Schnittstelle zu deklarieren explizit Mitglied der Implementierung. (Schnittstellen kann nicht erklären, Implementierung, explizite oder anderweitig).So, nehmen wir an, wir haben definiert:
Dann den folgenden Treiber zeigt die Wirkung der explizite interface-Implementierung.
InformationsquelleAutor drf
nicht ganz sicher, was Sie wollen, es zu tun, aber Sie tun können :-
InformationsquelleAutor Keith Nicholas
Es funktioniert nur, wenn die beiden Methoden haben verschiedene Signaturen, was bedeutet, dass Sie müssen haben eine unterschiedliche Anzahl von Parametern oder unterschiedlichen Typen von Parametern, oder beides.
Warum nicht Namen Ihrer zwei Methoden
GetFoo
undDoFoo
?Dies funktionieren würde
Diese auch funktionieren würde
Könnte man auch das deklarieren einer Eigenschaft. Eigenschaften bestehen aus zwei Methoden: Eine getter-und eine setter.
InformationsquelleAutor Olivier Jacot-Descombes