private Schnittstelle Inheritance
Historisch gesehen, haben Sprachen private Vererbung gestattet. In C++ können Sie von einem Typ erben, ohne mit diesem Typ polymorph kompatibel zu sein. Es ist nur eine bequeme Möglichkeit, eine Implementierung wiederzuverwenden. Im CTS können Sie keine private Implementierungsvererbung ausführen. Sie können jedoch die private Schnittstellenvererbung verwenden.
Private Schnittstelle Vererbung ist wirklich nur eine Möglichkeit, Methoden aus der öffentlichen API eines Typs zu verbergen. Sie werden in private Methoden kompiliert, sind aber tatsächlich über die Schnittstellenkarte eines Typs zugänglich. Mit anderen Worten, sie können nur über eine Referenz aufgerufen werden, die als Schnittstelle eingegeben wurde, auf der die Methode definiert ist. Ein Beispiel soll dies leichter verständlich machen:
class PrivateImplementer : IFoo
{
void IFoo.Foo()
{
Console.WriteLine("PrivateImplementer::IFoo.Foo");
}
}
In diesem Fall wird PrivateImplementer
öffentlich zu implementieren IFoo
bekannt. Somit kann eine Instanz polymorph als eine Instanz von IFoo
behandelt werden. Aber du kannst Foo nicht wirklich anrufen, wenn du es nicht als IFoo
behandelst. Dieser Code demonstriert das:
PrivateImplementer p = new PrivateImplementer();
p.Foo(); // This line will fail to compile
IFoo f = p;
f.Foo();
Sie können einzelne Methoden einer Schnittstelle auswählen, um privat zu implementieren. Zum Beispiel, wenn PrivateImplementer
implementiert IFooBar
, könnte es sich entscheiden, Foo privat zu implementieren, aber Bar öffentlich mit der üblichen Syntax.
In der Praxis gibt es nicht viele Fälle, in denen Sie eine private Implementierung verwenden würden. Die System.Collections.Generic
-Bibliothek verwendet diesen Ansatz zur geheimen Implementierung aller älteren, schwach typisierten Schnittstellen von System.Collections. Dies macht Rückwärtskompatibilität "einfach funktionieren", zum Beispiel die Übergabe einer Instanz von List<T>
an eine Methode, die eine IList
erwartet, wird gut funktionieren. In diesem speziellen Beispiel wäre es sehr schade gewesen, die neuen Typ-APIs zu überlisten (für die schwach typisierte Interoperabilität gibt es einige Methoden).
"Nein," ist eine ziemlich schlechte Antwort, wenn er herausfinden wollte, was Sie wussten. Klingt wie jemand, der nur zeigen will, wie viel sie wissen.
Obwohl das stimmt, wäre das nicht einer der nutzlosesten Nutzungen von Schnittstellen? Ich kann nicht verstehen, warum Sie jemals solch eine Konstruktion benutzen würden. – Razzie
kämpfen, um viel von einem Anwendungsfall dafür zu denken, oder zumindest einen Anwendungsfall, der nicht auch eine Gottklasse zu schaffen – annakata
Das ist, was ich die Frage als Bedeutung interpretiert, in diesem Fall war es nur eine dumme Frage der Interviewer gefragt! – RichardOD