Warum unterstützen die automatischen C # -Eigenschaften keine Standardwerte wie VB 2010?

8

Mit Blick auf die neuen Funktionen von VB 2010 stolperte ich über die Unterstützung für Automatisch implementierte Eigenschaften .

Da ich mit C # arbeite, kam mir das ziemlich bekannt vor, aber ich bemerkte, dass VB ein Feature hinzugefügt hatte, das ich gerne in C # hätte: einen willkürlichen Standardwert für die automatisch implementierte Eigenschaft:

%Vor%

Ich mag wirklich die saubere Verwendung von Auto-Eigenschaften in C #. Dies würde uns die Mühe ersparen, jedes Mal, wenn wir einfach einen Standardwert benötigen, ein Backing-Feld einzuführen und es mit der Eigenschaft zu verknüpfen, wodurch der Code unnötigerweise überlastet wird.

Ich habe mich gefragt, warum das in C # auch nicht eingeführt wurde? Was könnte der Grund dafür sein, dies nicht zu tun? Wird eine Syntaxdiskussion geführt oder gibt es technische Einschränkungen bei der Implementierung?

    
Rob van Groenewoud 13.04.2010, 08:22
quelle

4 Antworten

3

Was ist mit:

%Vor%

in der Praxis, das kommt auf dasselbe und ist nicht so viel zusätzliche Arbeit, glaube ich. Aber vielleicht sieht VB für lange Zeit klarer aus als C # ...; -)

EDIT (Begründung):
Sie haben nach der Begründung in Ihrem letzten Kommentar unter (und in) Ihrer ursprünglichen Frage gefragt. Ich denke, dass das Prinzip in C #, dass der Initialisierungscode nur an einen Ort und an einen Ort geht, nämlich der Konstrukteur, der Grund für diese Entscheidung ist. Wenn Sie einen anderen Ort hinzufügen, an dem Sie suchen müssen, um den Initialisierungscode zu finden, wird das Debugging schwieriger und der Code weniger klar.

Offensichtlich kann ein Inline-Initialisierungswert keine anderen Initialisierungen oder Berechnungen enthalten (zumindest sehr begrenzt). Während ich zustimme, dass es in der VB-Weise prägnanter sein kann, würde ich das C # -Team und Anders Hejlsberg verstehen, wenn sie sagen, dass sie es für einen größeren Vorteil halten, einen Platz für die Initialisierung zu haben.

BEARBEITEN Hier ist, was Microsoft darüber sagt . Kurz gesagt, nicht für C # 4.0, aber vielleicht C # 5.0? Auch:

  

"Es ist nicht so einfach, wie es sich anhört:   Das nächste, was Sie wollen, ist für die   Konstruktor, um die Unterstützung zu initialisieren   Feld, aber es kann nur durch   der Setzer, der vielleicht nicht was ist   du willst. "

und (nur ein Kommentator):

  

"Fehlende Initialisierung oder Konstruktor   Kontrolle macht das Feature praktisch   wertlos für Eigenschaften, die a zurückgeben   Referenztyp. "

    
Abel 13.04.2010, 08:27
quelle
10

Warum werden sie nicht einfach im Konstruktor voreingestellt? Das ist es auch.

    
Preet Sangha 13.04.2010 08:23
quelle
0

Obwohl ich kein Microsoft bin, würde ich vorschlagen, dass der wahrgenommene Nutzen geringer ist als die Kosten, um das Feature zu implementieren, zu testen und zu unterstützen.

Natürlich können Sie die Standardwerte einfach durch Deklaration eines Konstruktors festlegen, aber ich stimme zu, dass die VB-Syntax etwas übersichtlicher ist (besonders wenn Sie sie mit Metadaten wie <DefaultValue(...)> dekorieren)

    
Rowland Shaw 13.04.2010 08:24
quelle
0

Ich habe eine Lösung für das langwierige Geschäft, eine Auto-Property in ein Property-with-Backing-Feld umzuwandeln: Mein Add-In, AtomineerUtils macht das Refactoring für Sie mit einem einzigen Tastendruck.

    
Jason Williams 13.04.2010 08:35
quelle