Zugriffsmodifizierer auf Schnittstellenelemente in C#
Ich bekomme einen kompilieren Fehler aus der folgenden Eigenschaft.
Der Fehler ist:
"Der Modifizierer 'öffentlich' ist nicht gültig für dieses Element"
public System.Collections.Specialized.StringDictionary IWorkItemControl.Properties
{
get { return properties; }
set { properties = value; }
}
aber wenn ich entfernen Sie die IWorkItemControl
es kompiliert einwandfrei.
Warum bin ich immer diese Fehlermeldung und was ist der Unterschied von mit /nicht mit den interface-Namen in der Signatur?
InformationsquelleAutor der Frage benPearce | 2009-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Explizite interface-Implementierung lässt Sie nicht geben Sie alle zugriffsmodifizierer. Wenn Sie eine Schnittstelle implementieren, Mitglied explizit (durch die Angabe der interface-name vor dem Namen des members), die Sie zugreifen können, dass die nur über die Schnittstelle. Grundsätzlich, wenn Sie zu tun:
Können Sie nicht tun:
Gibt es einige Anwendungsfälle für für ELL. Zum Beispiel, Sie wollen, um eine
Close
Methode für Ihre Klasse kostenlos erworbenen Ressourcen, aber Sie wollen immer noch zu implementierenIDisposable
. Sie tun konnten:Diese Weise werden die Verbraucher der Klasse nur nennen kann
Close
direkt (und Sie werden nicht einmal sehenDispose
in der Intellisense-Liste), aber man kann immer noch dieTest
Klasse, wo einIDisposable
zu rechnen ist (z.B. in einemusing
- Anweisung).Anderen Anwendungsfall für ELL ist, die verschiedene Implementierungen der gleichnamige interface-Element für zwei Schnittstellen:
Wie Sie sehen, ohne EII-es ist gar nicht möglich zu implementieren beide Schnittstellen in diesem Beispiel wird in einer Klasse (Eigenschaften, die unterscheiden sich nur im Rückgabetyp). In anderen Fällen möchten Sie vielleicht absichtlich unterschiedliches Verhalten für die einzelnen Ansichten einer Klasse über verschiedene Schnittstellen.
InformationsquelleAutor der Antwort Mehrdad Afshari
Alle Elemente einer Schnittstelle werden, müssen öffentlich sein.
Nachdem alle, eine Schnittstelle ist die öffentliche Sicht auf ein Objekt.
Seit Eigenschaften ist ein element einer Schnittstelle IWorkItemControles ist bereits der öffentlichkeit, und Sie können nicht geben Sie die Zugriffsebene, sogar Redundant angeben, dass es öffentlich ist.
InformationsquelleAutor der Antwort abelenky