23 Stimmen

Privater Satz oder privates Mitglied?

Ich habe mich gefragt, was als bewährte Praxis in C# betrachtet wird, private/geschützte Member mit öffentlichen Gettern oder öffentliche Getter mit privaten/geschützten Settern?

public int PublicGetPrivateSetter
{
     get;
     private set;
}

private int _privateMember;

public int PublicGetPrivateMember
{
    get { return _privateMember; }
}

Ich finde, dass die Verwendung eines privaten Members in Ihrem Code expliziter macht, dass es sich um einen privaten Setter handelt (unter Verwendung von Namenskonventionen). Andererseits ermöglicht die Verwendung von privaten Settern die Verwendung von virtuellen (geschützten), die Schreibweise von weniger Code, bietet weniger Raum für Fehler und bietet Ihnen die Möglichkeit, später ein Seiteneffekt hinzuzufügen, wenn Sie es benötigen.

Ich konnte keine bewährte Praxis finden oder sogar feststellen, ob eine besser ist als die andere. Von dem, was ich gesehen habe, verwenden Menschen in der Regel 80% der Zeit (aus dem Code, den ich gesehen habe) keine privaten Setter... Ich bin mir nicht sicher, ob dies daran liegt, dass die Leute nichts über private Setter wissen, oder ob es als besser erachtet wird, tatsächlich private Member zu verwenden.

EDIT:

Tatsächlich gibt es weitere Vorteile, die ich vergessen habe, wenn man private Member verwendet, z.B. Standardwerte und die Verwendung von readonly.

0voto

Es gibt keine gute Antwort auf diese Frage. Die beste Praxis ist, unserer Firmennomenklatur zu folgen und wenn Sie allein sind, dann den Weg, den Sie bevorzugen

0voto

Reddog Punkte 14469

Nach meiner Meinung gibt es keine bewährte Praxis und nur sehr wenig (wenn überhaupt) Unterschiede im resultierenden kompilierten Code, es hängt wirklich nur von Ihren Bedürfnissen oder eigenen Vorlieben ab. Wenn Sie die benannten Standards Ihrer Gruppe befolgen und Anforderungen erfüllen (z. B. keine Notwendigkeit, eine Änderungsbenachrichtigung zu propagieren), dann sollte es keine Rolle spielen.

Ein Vorteil von privaten Feldern ist, dass Sie einen Standardwert am selben Ort wie Ihre Deklaration festlegen können. Bei einer automatisch implementierten Eigenschaft müssen Sie den Standard im Konstruktor festlegen, wenn er nicht null ist oder der Standardwert des Typs.

Ich persönlich bevorzuge jedoch private Setter. Aber wir verwenden in der Regel keine automatisch implementierten Eigenschaften, da unsere Setter normalerweise eine umfangreichere Funktionalität haben - z. B. Benachrichtigungen bei Aktualisierung der Eigenschaft, Protokollierung usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X