none
Wozu Get Set ohne anweisung? RRS feed

  • Frage

  • Guten Abend,

    ich habe mich den Tag mit der Get Set Syntax beschäftigt und es soweit verstanden, dass ich damit mehr Zugriff auf eine Variable habe im falle diese wird gelesen oder beschrieben. Doch wenn ich folgende Syntax habe:

    public double Hours { get; set; }

    Dann verhält sich Hours doch wie eine normale Variable ohne Besonderheiten beim Lesen oder schreiben. Es kommt mir so unnötig vor wie eine leere Funktion.

    Folgendes würde ich ja verstehen:

    public double Hours 
    { 
        get
        {
            //Code wenn gelesen wird
            return...
        }
        set
        {
            //Code wenn geschrieben wird
        }
    }

    Doch warum macht man ein einfaches Get Set hintendran ohne befehl, ist doch das selbe wie:

    public double Hours

    2. Frage was bringt eine lese geschützte Variable mit nur einem Setter.


    Donnerstag, 2. Juni 2016 16:48

Antworten

Alle Antworten

  • Hi,

    nö,

    public double Hours { get; set; }

    ist nicht dasselbe wie

    public double Hours

    Das erste ist eine Eigenschaft, das zweite eine Variable bzw. ein Feld. Die Unterschiede kannst Du bspw. hier nachlesen.

      http://forums.asp.net/t/1938293.aspx?Is+there+a+difference+between+the+definition+of+a+C+field+and+a+C+property+

    Bzgl. der Frage zu lesegeschützten Eigenschaften:

    Mir selbst fällt kein Grund ein, eine solche zu erstellen. Microsoft wohl auch (nicht) mehr, siehe:

      https://msdn.microsoft.com/de-de/library/ms182165.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 2. Juni 2016 17:01
    Moderator
  • Hi,
    das {get;set;} ist eine sog. autoimplemented Property. Schau Dir mal mit einem Reflector an, was der Compiler daraus macht. Er erzeugt ein Backing_Field und die Befehle zum Lesen und Schreiben im Getter und Setter für dieses Backing_Field.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Donnerstag, 2. Juni 2016 17:18
  • Hallo zusammen,

    ich habe mich zu meinen Anfängen mit C# auch gefragt warum es Eigenschaften und Felder gibt. Das klärte sich sobald ich die Technischen Zusammenhänge verstand, was vor allem bei Reflection (und Databinding, ...) wichtig ist. Nun sind das sehr komplexe Themen, ähnlich den anderen aus Stefans Link.

    Also entweder du nimmst es erstmal so hin und verstehst es nach und nach, oder aber du bedienst dich der Konzeptionellen Seite. Rion Williams schrieb in Stefans Link folgendes:

    Properties provide a level of abstraction allowing you to change the fields while not affecting the external way they are accessed by the things that use your class.

    Das ist meiner Meinung nach das wohl wichtigste von allem. Ein großes Problem bei der Softwareentwicklung ist die Wartbarkeit und Zukunftssicherheit. Es ist gut möglich dass du heute nur einen Eigenschaftswert in einer Eigenschaft speichern willst. Allerdings ist es gut möglich dass du morgen die Daten im Setter validieren willst oder aber andere Elemente über eine Änderung informieren willst.
    Sofern du überall mittels Eigenschaften abstrahiert hast ist das in sehr wenig Zeit umgesetzt. Ohne Eigenschaften kann es dagegen sehr leicht passieren dass komplexere Systeme wie Reflection (die du dafür natürlich irgendwo einsetzen musst) in diesem Zusammenhang plötzlich nicht mehr funktionieren. Teilweise ist diese Art von Fehlern auch nicht leicht aufzufinden.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 2. Juni 2016 17:45
    Moderator
  • Hallo BennIY,

    2. Frage was bringt eine lese geschützte Variable mit nur einem Setter.

    ich nehme an du meintest Eigenschaft. Das ist dann interessant, wenn der Variablenwert nur intern verwendet wird.

    Als anschauliches Beispiel:

    Stelle Dir einen Automaten vor, in den du Münzen oder Scheine eingeben kannst - so könnte es für den Schein ein Eigenschaft mit Setter geben und für die Münzen einen anderes Eigenschaft mit Setter und für den Wert ein Eigenschaft mit einem Getter und alle drei würden auf die gleiche Variable im Hintergrund gehen.

    Gruß


    - Florian

    Freitag, 3. Juni 2016 07:43