Hey alle miteinander,
ich habe ein Programm geschrieben, welches den Vor- und Nachnamen aus einer anderen Klasse zieht
Nun ist meine Frage, ob es besser ist im Mitarbeiter Konstruktor die private Eigenschaft (_Vorname) oder doch die public Propertie (Vorname) zu übergeben die wiederum auf die private Eigenschaft zugreift?! (wegen Sicherheit und so)
class Mitarbeiter
{
private string _Vorname = "Default";
private string _Nachname = "Default";
// Properties
public string Vorname
{
get
{
return this._Vorname;
}
set
{
this._Vorname = value;
}
}
public string Nachname
{
get
{
return this._Nachname;
}
set
{
this._Nachname = value;
}
}
// Mitarbeiter Konstruktor
public Mitarbeiter(string vorname, string nachname)
{
this._Vorname = vorname;
this._Nachname = nachname;
}
}
// MAIN CLASS
class Program
{
static void Main(string[] args)
{
// Mitarbeiter Instanz
Mitarbeiter m = new Mitarbeiter("DJ", "Bobo");
m.Nachname = "Jackson"; // Wert ändern
Console.WriteLine(m.Vorname+ " " + m.Nachname);
Console.ReadKey();
}
}
Futile place, futile program
Hi,
ich würde generell die öffentlich zugreifbaren Properties verwenden.
Hat wenig mit wirklicher Sicherheit zu tun - sondern vielmehr damit, dass du somit dem Problem ausweichst später versehentlich die eigene Logik zu durchbrechen.
Stell dir mal vor im Setter eines der Properties passiert noch was anderes wie nur das setzen der internen Variable - das würdest du somit (wahrscheinlich versehentlich) übergehen.
LG
Beispiel:
class MyClass
{
private string _myVariable;
public string MyVariable
{
get { return _myVariable; }
set
{
if (!string.IsNullOrWhiteSpace(value))
_myVariable = value;
else
_myVariable = myDefaultValueFromWherever;
}
}
}
Wenn du hier dann auf deine private Variable zugreifst - wuselst du dich um deine eigene Schutzmaßnahme herum.
Wenn Du Properties hast, dann arbeite immer mit diesen- egal ob es dahinter ein backing field gibt oder nicht.
Auf ein backing field sollte immer nur die Property zugreifen.
PS: Felder schreibt man klein, nicht _Nachname, sondern _nachname. ( [Artikel] C#: Richtlinien für die Namensvergabe )
PPS: Du kannst den Code folgendermaßen Vereinfachen - dank C# Syntaxzucker.
class Mitarbeiter
{
// Properties
public string Vorname {get;set;} = "Default";
public string Nachname {get;set;} = "Default";
// Mitarbeiter Konstruktor
public Mitarbeiter(string vorname, string nachname)
{
Vorname = vorname;
Nachname = nachname;
}
}
Der Default macht aber nur wenig Sinn, weil Du ja kein Mitarbeiter-Objekt erstellen kannst, ohne Vorname und Nachname aktiv aufgrund des Konstruktors setzen zu müssen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Vielen Dank euch beiden ihr habt mir sehr geholfen!
und danke zusätzlich Abt für diese sehr vereinfachte Schreibweise
Futile place, futile program