Entwickler-Ecke
C# - Die Sprache - Felder mit { get; set {...} } möglich?
erfahrener Neuling - Di 17.05.16 13:39
Titel: Felder mit { get; set {...} } möglich?
Hallo,
normalerweise habe ich Felder meistens so festgelegt:
C#-Quelltext
1:
| public string MyString { get; set; } |
oder so:
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:
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. - 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:
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
erfahrener Neuling - Di 17.05.16 14:21
Ok danke, dacht ich mir schon. :/
Ralf Jansen - 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 [
https://www.postsharp.net/] 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!