Laden...

VS: Bei der Generierung eines Stubs soll Eigenschaft mit Variable kombiniert werden

Erstellt von Terep vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.358 Views
T
Terep Themenstarter:in
9 Beiträge seit 2013
vor 10 Jahren
VS: Bei der Generierung eines Stubs soll Eigenschaft mit Variable kombiniert werden

Lege ich ein Objekt person1 der Klasse Person an und rufe eine nicht existierende Eigenschaft auf, zum Beispiel person1.name so wird name rot gekringelt markiert.
Klicke ich mit der rechten Maustaste darauf, erscheint ein kleines blaues Rechteck mit dem Hinweistext: Optionen für die Bindung des ausgewählten Elements

Eigenschaftstub für name in namespace Person generieren  
Feldstub  für name in in namespace Person generieren  

Bei Eigenschaft public string name { get; set; }  
Bei Feldstub public string name;  

Also generiert C# entweder eine Eigenschaft oder eine Variable.

Das ist soweit ok. Was ich vermisse, ist die Kombination von Beiden.

Sollte C# nicht eine Variable private name und gleichzeitig die Eigenschaft systematisch anders benennen, zum Beispiel als Name generieren.

Denn die Inhalte der Variable sollen ja nur durch die Eigenschaft angesprochen werden.

Notfalls kann man auf die Variable verzichten und nur mit der Eigenschaft arbeiten. Aber die Eigenschaft selbst kann keinen Wert speichern, dazu braucht sie eine Variable, eben name.

Ich vermisse hier eine Struktur etwa in der Art, die Variable ist immer klein geschrieben, die Eigenschaft groß.
Erst wird die Variable, danach die Eigenschaft generiert.

Natürlich kann ich das selbst so machen. Im meinem Buch wird der Variable ein Unterstrich vorangestellt. Halte ich persönlich für unschön.

Eigenschaft als eine Art Methode kannte ich vorher nicht. Habe ich es so richtig beschrieben oder habe ich was Wichtiges überlesen?

Terep

16.842 Beiträge seit 2008
vor 10 Jahren

Die Struktur gibt es, und nennt sich Naming Guideline.

Felder sind immer private. Eigenschaften Variabel.
Felder sind nur Datenhalter und behalten niemals eine Logik. Eigenschaften können eine Logik beinhalten.

Siehe auch: readonly Felder in Subklasse verdecken und in geerbter Methode verwenden

T
Terep Themenstarter:in
9 Beiträge seit 2013
vor 10 Jahren

Hallo Abt
Danke für die prompte Antwort.

Felder sind immer private. Eigenschaften Variabel.
Felder sind nur Datenhalter und behalten niemals eine Logik. Eigenschaften können eine Logik beinhalten.

Das ist klar. Ich vermisse nur eine Regel, Vorgabe bzw. Vereinbarung, wie Variable und Eigenschaft verknüpft werden.

Terep

5.658 Beiträge seit 2006
vor 10 Jahren

Hi Terep,

ich verstehe deine Frage nicht so richtig, aber ich nehme an, du beziehst dich auf diese Konstruktion:


private int count = 0;
public int Count
{
  get { return count; }
  set { count = value; }
}

Das ist keine Regel oder Vereinbarung, daß ist ein Feld, das durch eine Eigenschaft zugreifbar ist. Übrigens exakt das gleiche, wie:


public int Count { get; set; }

Die einzige Konvention, die hier angewendet wird, ist die Naming Convention für Felder (klein und ohne Unterstrich) und Eigenschaften (groß).

Wenn das deine Frage nicht beantwortet, erklär uns mal, was du mit "Variable und Eigenschaft verknüpfen" meinst.

Christian

Weeks of programming can save you hours of planning

T
Terep Themenstarter:in
9 Beiträge seit 2013
vor 10 Jahren

Hi MrSparkle

Was mich gestört hat, ist die „lose“ Konvention, Variable klein geschrieben, Eigenschaft groß bzw. mit oder ohne Bindestrich.

Andererseits kann man die Eigenschaft ja nicht mit einer Methode verwechseln und die Verknüpfung ist ja mit der Namensgleichheit gegeben.

Wahrscheinlich hat es mich irritiert, weil es für mich neu ist Eigenschaften neben Methoden zu haben.

Danke für das Nachfragen.

Terep

PS Ihr seid hier wirklich prompt. Das ist schön, dann kann man seine Sachen kopfmäßig gut abarbeiten.

5.658 Beiträge seit 2006
vor 10 Jahren

Ja, es sind Konventionen. Und die sind eben "lose", d.h. wenn man sich nicht daran hält, läuft das Programm trotzdem. Aber wenn man sich daran hält, dann hat man eben nicht nur funktioniereneden Code, sondern auch gut lesbaren (besonders für andere Programmierer) und somit besser zu wartenden Code.

Google mal nach den Naming Conventions von Microsoft, die sind wirklich gut durchdacht und sinnvoll.

Christian

Weeks of programming can save you hours of planning

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Terep,

ich vermute, du möchtest, dass VS einen weiteren Menüpunkt anbietet, mit dem Code für eine Kombination aus Feld und Eigenschaft generiert wird. Das wäre in der Tat praktisch, denn sonst hat man bei späteren Erweiterungen das Problem aus Automatische Properties: Eigener Setter ohne zugehörige private Variable. Möglich?. Leider gibt es das wohl trotzdem nicht.

BTW: Bei public string name { get; set; } gibt es natürlich auch eine Variable nur wird diese automatisch vom Compiler generiert und ist daher im Quellcode nicht ersichtlich. Aber im compilierten (IL-)Code ist sie vorhanden. Der automatisch generierte Setter setzt sie, der automatisch generierte Getter liest sie aus. Dieser Punkt fällt - im Gegensatz zu der eigentlichen Frage den Menüpunkten in VS - jedoch unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

P
660 Beiträge seit 2008
vor 10 Jahren

Hallo,

um das problem zu lösen hatte ich mir mal selbst ein Code-Snippet für VS geschrieben (die ganzen Infos findet man in der msdn).

z.b. generierte "Property" folgendes


private DataType _MyPropertyName;
public DataType MyPropertyName
{
    get{return _MyPropertyName;}
    set
    {
        if(_MyProperty != value)
        {
            _MyProperty = value
            NotifyProprtyChanged(()=>MyProprtyName)
        }
    }
}

DataType, _MyPropertyName und MyPropertyName konnten dann durch den Benutzer ersetzt werden.

Den Snippet habe ich leider nicht mehr (ein Grund mehr für Datensicherung XD)

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"