Interface-Klasse mit Getter und Setter in c #

8

Wie ich hier lese Ссылка

Es ist möglich, in eine Interface-Klasse zu bekommen, ABER NICHT gesetzt?

Also, wenn ich Getter und Setter in Interface will, muss ich die alte Syntax getVar setVar erstellen, nur weil die neue Syntax nicht in die Interface Class Syntax passt?

Update: Wenn ich Set in Interface-Klasse weglassen muss, bedeutet dies, dass ich keine Klasse erzwingen kann, um Setter zu haben, der den Zweck einer Interface-Klasse in diesem Fall besiegt, wie ich nur teilweise erzwingen kann?

    
user310291 20.09.2010, 18:25
quelle

6 Antworten

22

Nein. Ich glaube, du hast es falsch verstanden. In diesem Artikel geht es um die Möglichkeit , eine Schnittstelle mit einer schreibgeschützten Eigenschaft (eine Eigenschaft mit nur getter) zu haben. Aber wenn Sie möchten, können Sie auch den Setter in die Schnittstelle einfügen:

%Vor%     
Andrea Parodi 20.09.2010, 18:38
quelle
10

Sie können die Eigenschaftensyntax verwenden. Verwenden Sie diese Kombination:

%Vor%

Sie können natürlich vollständige Implementierungen für die Getter in Something.Test hinzufügen, wenn Sie möchten. Ich habe nur Hintergrundfelder zur Abkürzung verwendet.

Denken Sie daran, dass eine Schnittstelle das Minimum an Dingen definiert, die Sie implementieren müssen. Sie können jede Soße (neue Methoden, Accessoren, Mitglieder, usw.) oben hinzufügen, die Sie wollen. Sie könnten sogar einen öffentlichen Setter hinzufügen:

%Vor%

Die einzige Einschränkung ist, dass jemand die hinzugefügte Soße nicht verwenden kann, es sei denn, sie haben eine Referenz des konkreten Typs (die Klasse, nicht die Schnittstelle) oder eine andere Schnittstelle, die die von Ihnen hinzugefügten Methoden definiert.

    
Merlyn Morgan-Graham 20.09.2010 18:37
quelle
6

Ja, einfach set; aus der Eigenschaftsdeklaration weglassen. Zum Beispiel:

%Vor%     
Nathan Ernst 20.09.2010 18:28
quelle
5

Die Antwort ist tatsächlich die Mischung der obigen Antworten: Setzer auf der Schnittstelle weglassen und get; private set; auf der Klasse haben.

    
Aliostad 20.09.2010 18:30
quelle
3

Wenn Sie nur die Verfügbarkeit wünschen, verwenden Sie einfach {get;private set;}

Ссылка

  

Die Klasse, die im vorherigen Beispiel gezeigt wird, ist änderbar. Client-Code kann die Werte in Objekten ändern, nachdem sie erstellt wurden. In komplexen Klassen, die sowohl signifikantes Verhalten (Methoden) als auch Daten enthalten, sind oft öffentliche Eigenschaften erforderlich. Für kleine Klassen oder Strukturen, die nur eine Menge von Werten (Daten) kapseln und wenig oder keine Verhaltensweisen haben, wird empfohlen, die Objekte unveränderlich zu machen, indem der set-Accessor als privat deklariert wird. Weitere Informationen finden Sie unter Vorgehensweise: Implementieren einer Lightweight-Klasse mit automatisch implementierten Eigenschaften (C # -Programmierhandbuch).

     

Attribute sind bei automatisch implementierten Eigenschaften erlaubt, aber offensichtlich nicht bei den Hintergrund-Feldern, da diese nicht von Ihrem Quellcode aus zugreifbar sind. Wenn Sie ein Attribut für das Hintergrundfeld einer Eigenschaft verwenden müssen, erstellen Sie einfach eine reguläre Eigenschaft.

    
Gage 20.09.2010 18:28
quelle
2

Sie haben missverstanden. Laut Artikel können Sie Zugriffsmodifikatoren nicht auf der Schnittstelle verwenden.

Sie können sowohl get als auch set in der Interface-Eigenschaft verwenden!

Siehe im folgenden MSDN-Beispiel:

Ссылка

    
Tor 20.09.2010 19:17
quelle

Tags und Links