C# Wie gehört es sich die getter/setter zu machen?

Zeboo

Lt. Commander
Registriert
Juli 2008
Beiträge
1.562
Hi. Wie gehört es sich jetzt in C# gett und setter zu setzen?

Ich kann zum Beispiel sagen:
Code:
        public String Name
        {
            get { return _name; }
            set { _name = value; }
        }

oder aber auch:
Code:
        public String Name { get; set; }

Klar ist die 2. Variante kürzer und würde das nehmen, aber anscheinend machen es manche auch so wie im 1. Beispiel. Was gehört sich jetzt?

Danke und Gruß

PS: Ich sehe oft das in c# Variablen mit Großbuchstaben anfangen (Name) und nicht wie wir das aus c++, java kennen klein geschrieben sind. Ist das normal?
 
Das Zweite ist, wenn ich mich recht erinnere, eine Kurzform der Ersten Variante. Zugriffsrechte kannst du hier auch mit einbauen, wie protected und private.


Jeder schreibt wie er es will.
Die beste Notation zur Benennung von Variablen ist die sogenannte Kamel-Notation ( ich glaube Microsoft verwendet den Standard auch):

Code:
int numberOfObjs = 4;
private int _index;

Also bei längeren Namen den ersten Buchstaben klein, die jeweils ersten Buchstaben der anderen Wörter groß. Groß schreibt man stattdessen Methoden.
Code:
int Square()
{
   ...

Manche schreiben noch den Datentyp als ein ein Zeichen langes Präfix in den Name:
Code:
int iAge = 4;
float fAngle = 270.0;
bool bEnabled = false;

Ich persönlich lasse die Präfixe bzgl. des Datentyps aber weg, der Name sollte ausreichen um die Variable zu identifizieren.
 
Zuletzt bearbeitet:
Der Unterschied ist, dass du im ersten Beispiel ein PRIVATE FIELD füllst und damit kapselst du das ganze. Und im 2. Beispiel hast du nur ein public Property:

Wenn dir das nicht klar ist, solltest du dich nocheinmal mit OOP auseinandersetzen. KAPSELUNG!
 
Zuletzt bearbeitet: (Falsch gesehen!)
Ich würde es so machen wie die API es anbietet und anschließend formatieren.

EDIT: Meine IDE, war mit den Gedanken gerade woanders ^^
 
Zuletzt bearbeitet:
Messinho schrieb:
Der Unterschied ist, dass du im ersten Beispiel ein PRIVATE FIELD füllst und damit kapselst du das ganze. Und im 2. Beispiel hast du nur ein public Property:

Wenn dir das nicht klar ist, solltest du dich nocheinmal mit OOP auseinandersetzen. KAPSELUNG!

Dann halt dich mal schön selber an deinen Tip, denn was du da schreibst ist totaler Blödsinn.

Der einzige Unterschied zwischen den beiden ist die Schreibweise. Letzteres ist ein Auto-implemented property, eingeführt mit Release 3.0, vorher gab es das nicht. Der Vorteil ist einfach nur, dass falls keine weitere Logik erforderlich ist, um einen Wert zu setzen oder zu erhalten, kann man den Backingstore weglassen, der Compiler generiert diesen dann automatisch.

Wann du was benutzt hängt stark von deiner Klasse ab. Der Link von PapstRatze ist schon lesenwert - da gibts ein paar Beispiele, wann es Sinn macht, ein Property "manuell" zu implementieren. Wenn du mit WPF oder der WinRT arbeitest, wirst du sehen, dass man auf Auto-implemented properties immer dann verzichtet, wenn sie als Daten-Kontext für ein UI Element dienen. Dies liegt daran, dass der Setter zusätzlich dazu benutzt wird, den UI-Thread zu benachrichtigen, dass sich der Wert geändert hat. (nur als Beispiel am Rande ;))
 
Und ganz wichtig: Das was oben beschrieben wird(im Bezug auf die get set Thematik) sind keine Variablen sondern Properties. Variablen werden gewohnt klein geschrieben Properties groß...
Wie im Beispielcode ja auch gut umgesetzt...
 
PapstRatze schrieb:

Ok das klappt momentan nicht, 502 - Web server received an invalid response while acting as a gateway or proxy server.

Aber mal eine andere Frage, wenn ich also
Code:
public String Name { get; set; }
nehme, sieht man die 'eigentliche' Variable gar nicht. Wird es dann irgendwo automatisch generiert mit dem namen '_name'?
 
Zeboo schrieb:
Wird es dann irgendwo automatisch generiert mit dem namen '_name'?
Ja, das generiert der Compiler automatisch.
Der Name des Feldes ist aber deutlich kryptischer gewählt (der enthält auch Zeichen die du gar nicht verwenden könntest) um Konflikte mit deinem Code zu vermeiden.
 
Ah okey. Man kann sowas auch gar nicht herausfinden was für Namen generiert werden? :) Nur so spaßeshalber, viel bringen wird das dann nicht.
 
Doch könnte man ;)

Reflection oder einfacher mit dem .net reflector
 
Zurück
Oben