Vererben von Eigenschaften mit Accessibility-Modifizierer in C #

7

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?

    
prosseek 24.09.2011, 01:58
quelle

5 Antworten

21
  

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%     
Reed Copsey 24.09.2011, 02:05
quelle
1

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.

    
dtb 24.09.2011 02:03
quelle
0

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.

    
Michael 24.09.2011 02:05
quelle
0

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; }

definiert werden     
JohnD 24.09.2011 02:05
quelle
0

Ich glaube, dass Interface-Member öffentlich sein müssen, wenn das Interface selbst öffentlich ist. Ihre Implementierung der Eigenschaft ist deshalb fehlerhaft.

    
user596075 24.09.2011 02:06
quelle

Tags und Links