Autor Beitrag
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Di 17.05.16 13:39 
Hallo,

normalerweise habe ich Felder meistens so festgelegt:
ausblenden C#-Quelltext
1:
public string MyString { get; set; }					
oder so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private string myString;

public string MyString 

    get { return this.myString; }
    set { this.myString = value }
}

Nun möchte ich aber eine Mischung aus beidem haben, d.h. ich habe keine extra Variable, will aber bei set noch etwas hinzufügen, etwa so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public string MyString 

    get { return ?; }
    set { ? = value + "irgendwas"; }; 
}

Geht das irgendwie? Falls es nicht geht: Wo werden denn bei { get; set; } die Werte hergeholt/abgelegt?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 17.05.16 14:04 
Hallo,

das wäre mir nicht bekannt, dass das geht. Dann müsstest Du ein privates Feld haben, welches im Hintergrund die Daten hält:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private string myString;

public string MyString 

    get { return myString; }
    set { myString = value + "irgendwas"; }; 
}


Normalerweise würde man aber noch prüfen, ob beim setzen der neue Wert wirklich "neu" ist oder dem alten Wert entspricht. Dann kann man sich das Setzen (und evtl. Benachrichtigen, bei INotifyPropertyChanged) sparen.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
erfahrener Neuling Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Di 17.05.16 14:21 
Ok danke, dacht ich mir schon. :/
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.05.16 14:28 
Versuch dich doch mal an einem Syntax in dem du eine bedeutende Menge an Code gegenüber klassischer Property Implementierung einsparen könntest und alle denkbaren Varianten von "will aber noch etwas hinzufügen" (näherungsweise) abdeckt. Da sollte schnell auffallen das der Gewinn an Kompaktheit so gering ist das sich das kaum lohnt. Gegenüber deinem Syntax mit =? fehlt doch nur noch die eine Zeile mit der Definition des dahinterliegenden Feldes.

Im allgemeinen Fall lohnt sich bei sowas dann einen Blick in die Aspect orientierte Ecke der Programmierung. In C# dann sowas wie PostSharp wo man dann per Attribute Verhalten an eine Auto Property dranschrauben könnte. Das ist aber in diesem Fall mit Kanonen auf Spatzen geschossen ;)
Motz
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 14.06.16 08:32 
Du brauchst doch eine extra private Variable - sonst macht ja eine Eigenschaft gar keinen Sinn! Der Sinn ist ja, dass du einen Fremdzugriff auf eine private Variable genau kontrollieren kannst, um die Programmsicherheit zu gewährleisten