Laden...

VS2017 Methoden anstatt Eigenschaften?

Erstellt von Pseudonym4711 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.266 Views
P
Pseudonym4711 Themenstarter:in
55 Beiträge seit 2014
vor 6 Jahren
VS2017 Methoden anstatt Eigenschaften?

Hallo Zusammen,

ich habe nach längerer Pause mal wieder meine Entwicklungsumgebung geöffnet
und festgestellt, dass mir mein VS17 anstelle von Eigenschaften auf einmal Methoden vorschlägt.

Bisher schrieb ich es immer so:

public class MyClass
{
    string _firstName;
    public string FirstName { get => _firstName; set => _firstName = value; }
}

Der Vorschlag vom VS lautet neuerdings aber:

public class MyClass
{
    string _firstName;
    public string GetFirstName() => _firstName;
    public void SetFirstName(string value) { _firstName = value; }
}

Ist das jetzt die neue "Empfehlung", dass man das jetzt so machen sollte?

Viele Grüße
Torsten

16.842 Beiträge seit 2008
vor 6 Jahren

Kann das sein, dass Du ein Plugin aktiv, das Dir vorschlägt? ReSharper? 😉

VS würde in diesem Fall nicht mal vorschlagen, dass man hier kein Backing Fields benötigt; ReSharper würde das aber zB. tun.
ReSharper bietet die Option bei allen Eigenschaften an, die Backing Fields haben; nicht aber bei der verkürzten Schreibweise von Eigenschaften (public string Name { get; set; })

Für mich jetzt nicht ersichtlich, woher das kommt - aber meine Vermutung ist ReSharper.
Und viele/einige Optionen/Tipps in ReSharper halte ich für nicht hilfreich.

P
Pseudonym4711 Themenstarter:in
55 Beiträge seit 2014
vor 6 Jahren

Hallo Abt,

besten Dank für deine Antwort.

Es ist eine Visual Studio Community 2017 Standardinstallation ohne irgendein Plugin.
Ich weiß dass man in den Optionen einiges ändern kann, aber davon
lass ich eigentlich auch immer die Finger.

16.842 Beiträge seit 2008
vor 6 Jahren

Wie gesagt; es ist ein Möglichkeitshinweis - keine Empfehlung.
An der Stelle wäre sowieso überhaupt kein backing field notwendig (und das wegzulassen, wenn nicht notwendig, ist auch eine definitive Empfehlung).

3.003 Beiträge seit 2006
vor 6 Jahren

Du bist da ein bisschen auf dem Holzweg. Was du da hast, ist kein Vorschlag, sondern eine Quick Action, d.h. eine mögliche Refaktorierung, die du an der Stelle vielleicht vornehmen willst. Dh das ist nur eine Hilfe für den Fall, dass du die Property umgestalten willst. Hast du das nicht vor - ignorier die quick action 😃. Ein besseres Beispiel für eine derartige Quick Action nwäre zB die angebotene Möglichkeit, ein if-else-Statement in ein switch umzugestalten (und anders herum). Auch das ist nicht BESSER, nur anders.

Und ja, sowohl die Stelle als auch die Art der Umgestaltung sind eher...dämlich. Dedizierte Tools wie Resharper spielen da immer noch in einer ganz anderen Liga. Im Anhang Resharpers Vorschläge (die Quick Action ist immer noch da, 5. Option im Screenshot).

Grüße,

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

P
Pseudonym4711 Themenstarter:in
55 Beiträge seit 2014
vor 6 Jahren

Vielen Dank euch beiden für eure Antworten!

@Abt

Verstehe ich dich richtig, dass wenn hier nichts weiteres gesteuert/geschaltet wird, wie zum Beispiel hier:

public class MyClass : NotifyPropertyChanged
{
    string _firstName;
    public string FirstName { get => _firstName; set { _firstName = value; OnPropertyChanged; } }
} 

Es noch einfacher gehalten werden sollte so wie hier?

public class MyClass
{
    public string FirstName { get; set; }
} 
1.040 Beiträge seit 2007
vor 6 Jahren

Gerade in deinem Beispiel geht die verkürzte Schreibweise NICHT. 😉

public class MyClass
{
    string _firstName;
    public string FirstName { get => _firstName; set { _firstName = value; } }
}

public class MyClass
{
    public string FirstName { get; set; }
}

Wenn in der Property nur eine dumme Zuweisung und ein dummes Abfragen stattfindet, kann die verkürzte Schreibweise genutzt werden. =)

16.842 Beiträge seit 2008
vor 6 Jahren

Also beim Code oben wäre es gegangen; mit der Ausführung der Methode OnPropertyChanged natürlich nicht mehr.
Aber das war halt auch im Beispiel des Ausgangspost nicht ersichtlich.

P
Pseudonym4711 Themenstarter:in
55 Beiträge seit 2014
vor 6 Jahren

Danke Jungs,

das beantwortet alles, ich hatte mich falsch herum ausgedrückt. 😉