Wie lege ich den Wert einer schreibgeschützten Eigenschaft mit generischen Gettern und Sätzen fest?

8

Ich bin mir nicht sicher, ob ich das richtig formuliert habe ... aber ich habe den folgenden Code:

%Vor%

Natürlich bekomme ich ein Lese-Problem ... das verstehe ich. Gibt es trotzdem, um diesen Eigenschaftswert zu setzen, ohne etwas wie das Folgende tun zu müssen:

%Vor%

oder

%Vor%

Vielen Dank im Voraus!

    
mattruma 19.02.2009, 12:28
quelle

5 Antworten

31

Ich würde dafür gehen:

%Vor%

Natürlich wäre es offen für die Einstellung innerhalb dieser Klasse, aber da Sie es schreiben, hoffe ich, dass Sie den Sinn haben, Ihre eigenen Absichten nicht zu brechen ...

Meiner Meinung nach sind Dinge wie Leseeigenschaften vor allem wichtig, wenn man sie von außen betrachtet. Von innen ist es egal, was es ist, denn dort bist du der König =)

    
Svish 19.02.2009, 12:36
quelle
4

Wenn die Eigenschaft ItemId nur für externe Benutzer Ihrer Klasse schreibgeschützt sein soll, ist die Antwort von Svish der richtige Weg.

Wenn ItemId in der Klasse selbst schreibgeschützt sein soll, müssen Sie Folgendes tun:

%Vor%     
LukeH 19.02.2009 12:45
quelle
2

Sie können readonly Schlüsselwort

verwenden %Vor%     
Jakub Šturc 19.02.2009 12:32
quelle
2

Ich fürchte, Ihre Frage ist nicht sehr klar - aber wenn kein Property Setter definiert ist, dann können Sie ihn sicher nicht nennen.

Sind Sie tatsächlich nach einer automatisch implementierten schreibgeschützten Eigenschaft, die nur innerhalb des Konstruktors gesetzt werden kann? Wenn ja, ich fürchte, das ist nicht verfügbar, so wie ich es gerne hätte.

Nur um zu erweitern, was ich meine, würde ich wie gerne tun können:

%Vor%

Grundsätzlich wäre es "mache eine Eigenschaft wie ein Readonly-Feld."

    
Jon Skeet 19.02.2009 12:33
quelle
0

Verwenden Sie einen privaten Setter oder legen Sie das Hintergrundfeld fest?
(Aber dann müssen Sie sicherstellen, dass der Name Ihres Hintergrundfelds anhand des Eigenschaftsnamens ermittelt werden kann.
Zum Beispiel indem Sie sicherstellen, dass Ihr Backing-Feld immer denselben Namen wie der Eigenschaftsname hat, aber mit einem Unterstrich versehen ist; wie NHibernate macht es mit seinen Zugriffsstrategien).

    
Frederik Gheysels 19.02.2009 12:35
quelle

Tags und Links