Get und Set Properties - wann sinnvoll?



  • Hi,
    diese Klasse hat ne Eigenschaft, die einen Wert setzen und zurückgeben kann.

    public class Profusion
        {
            int something;
            public int MyProperty { get { return something; } set { something = value;} }
        }
    

    Ist das nicht unnötig viel Schreibarbeit? Tut diese Klasse hier nicht das gleiche?

    public class Rationality
        {
            public int something;
        }
    

    Warum sollte man denn im obigen Fall die Property-Variante wählen?
    mfg



  • Ein Property ist nur eine kürzere Schreibweise für eine Get/Set-Methoden-Kombination. Dass solche und warum solche nötig sind findest du im Internet unter dem Stichwort "Datenkapselung", einem Prinzip der objektorientierten Programmierung.

    BTW:

    public string MyProp { get; set; }
    

    ist kürzer.

    MfG SideWinder



  • IMMER Property.

    Damit Du im Zweifelsfall verfolgen kannst, wer den Fehler verurscht hat. Einfach ein if/throw in set rein und fertig. Fenster Aufrufstack und man hat ihn.
    Ok, fast immer. Wenn Du sicher bist, daß niemals obige Suche nötig ist und Du nicht zwischen read- und write-Rechten unterscheiden willst und niemals unterscheiden willst, und die lächerlich wenigen 5 Takte (heute eine Nanosekunde) (sogar abnehmend, weil die Prozessorbauer sich natürlich des Problems annehmen) für den Zugriff sparen willst, dann halt anders.

    Die Schreibarbeit ist ja nicht das große Ding. Die Lesearbeit ist das blöde. Also ich habe stets mindestens 10-mal so viel Lese-Arbeit wie Schreib-Arbeit. Fehlersuche halt. Wenn ich die Quote langsam verbessert habe, gehe ich halt komplizierter Probleme an, so daß ungefähr 1:10 bleibt.

    So ein Standard-Property-Ding lese ich weg wie als nicht anders als wenn es als rohes Attribut dastände. Damit ist Get/Set-Property eigentlich nicht teurer. Beim Lesen. Also bei allem, auf was es ankommt. Wenn es mehr als nur nichts tut, muß ich natürlich nachdenken. Aber dann ist es in C# genau dort gut aufgehoben und minimaldenkisch. Also gut.

    Weiche nur ab von "Attribute immer private", wenn Du weißt, daß es Performance bringt und du weißt, daß die Zusatzperformance im Gesamtprogramm auch noch ausreichend Einfluß hat. edit: Wobei das sogar eine Optimierung ist, die ein Hauptschüler nach entsprechender Einarbeitung ausmessen könnte und nach vorgegebenem Scheme auswählen könnte und zu 99% optimal wäre. Mach Attribute immer private und erwarte, daß Dein Compilerbauer den Compiler (und deswegen auch die VM) verbessert. In zwei oder drei Jahren haben die es gelöst.


Anmelden zum Antworten