Ich habe versucht, die Schnittstelle zu erben und einige der automatisch generierten set-Eigenschaften als privat zu definieren. Dies ist ein Beispiel.
%Vor% Als ich versuchte es zu kompilieren. Ich habe eine Fehlermeldung 'MyClass.C' does not implement interface member 'MyClass.A.X.set'. 'MyClass.C.X.set' is not public.
erhalten.
Ich habe versucht mit private set;
in iterface A
, aber ich habe diesen Fehler wieder: 'MyClass.A.X.set': accessibility modifiers may not be used on accessors in an interface
.
Ist dieser Accessibility-Modifikator in C # nicht erlaubt?
Ich habe es mit dem privaten Set versucht; in Iterface A, aber ich habe diesen Fehler wieder
Wenn für Ihre Schnittstelle nur eine Eigenschaft verfügbar sein muss, definieren Sie sie wie folgt:
%Vor% Die Deklaration einer Schnittstelle definiert die öffentliche Gruppe von Membern, die der implementierende Typ haben muss. Also, wenn C
implementiert A
, muss es ein öffentliches Mitglied für jedes Mitglied von der Schnittstelle definiert haben.
A
definiert, dass jeder Implementierungstyp eine öffentliche Eigenschaft X
mit einem öffentlichen Getter und einem öffentlichen Setter haben muss. C
erfüllt diese Anforderung nicht.
Sie können sich eine Schnittstelle als die Mindestfunktionalität vorstellen, die Ihre Klasse implementieren muss. Wenn die Schnittstelle angibt, dass eine Eigenschaft eine get
- und eine set
-Klausel freigibt, müssen Sie eine öffentliche get
- und set
-Klausel in Ihrer Klasse implementieren, da nur öffentliche Methoden und Eigenschaften Schnittstellen implizit implementieren können.
Sie können das Schlüsselwort set
in der Schnittstelleneigenschaftsdefinition einfach weglassen, wenn Sie keinen öffentlichen Mutator verfügbar machen möchten. Dann können Sie die Implementierung mutator entweder öffentlich oder privat machen.
Nein, das ist nicht erlaubt. Denken Sie daran, dass Code, der eine Instanz von class C
verwendet, als interface A
behandeln kann, was bedeutet, dass der Vertrag ein öffentlicher Getter und Setter für die Eigenschaft X ist.
Dies gilt sowohl für die Klassenvererbung als auch für die Schnittstellenvererbung. Sie müssen dem Vertrag des Typs folgen, von dem Sie abgeleitet sind.
Wenn die Absicht des Codes darin besteht, dass die Eigenschaft X keinen öffentlichen Setter haben soll, sollte die Schnittstelle nur mit { get; }
Ich glaube, dass Interface-Member öffentlich sein müssen, wenn das Interface selbst öffentlich ist. Ihre Implementierung der Eigenschaft ist deshalb fehlerhaft.
Tags und Links c# inheritance properties