none
Eigenschaften, get/set RRS feed

  • Frage

  • Moin zusammen,

    wenn ich mir eine Eigenschaft anlege mit get und set, dann geh ich normal davon aus, dass ich auf die Variable dann auch mit get/ set zugreifen muss ... könnte mir kurz jemand erklären warum es bei diesem Beispiel weggelassen werden kann.

    // Auto-Impl Properties for trivial get and set
        public double TotalPurchases { get; set; }


    cust1.TotalPurchases += 499.99;

    http://msdn.microsoft.com/de-de/library/bb384054.aspx

    Donnerstag, 1. Dezember 2011 10:56

Antworten

  • Der C# Compiler nimmt dir einfach die Arbeit ab, das private Feld, auf das getter und setter zugreifen, selbst anlegen zu müssen, d.h. statt

      private double totalPurchases;

      public double TotalPurchases {

        get { return totalPurchases; }

        set { totalPurchases = value; }

      }

    muss man nur nur noch

      public double TotalPurchases { get; set; }

    schreiben. Die Eigenschaft "TotalPurchases" benutzt man immer schon mit cust1.TotalPurchases.


    MVP Data Platform Development My blog
    Donnerstag, 1. Dezember 2011 11:25
  • Hallo Bruce,

    bezieht sich Deine Frage auf den Zugriff auf die Properties? Auf Properties greifst Du prinzipiell genau so zu, als wären es Fields / variablen.

    Also bezüglich des Zugriffs sind die beiden Definitionen identisch:
    public double TotalPurchases { get; set; }
    public double TotalPurchases;

    Der Zugriff erfolgt z.B. über ein
    cust1.TotalPurchases += 499.99;
    und es gibt keinen sichtbaren Funktionsaufruf im Code.

    Lediglich intern kommen die großen Unterschiede zum tragen. Aber das macht der Compiler alles für Dich. So wird bei Properties immer Code aufgerufen was bei einfachen Variablen nicht der Fall ist.

    Ist halt eine einache Vereinfachung. Ein Vergleich zeigt dies auch schnell. Stell Dir vor, man müsste sowas schreiben:
    cust1.TotalPurchases.Set(cust1.TotalPurchases.Get() + 499.99); // Das ist natürlich Unsinn!

    Aber sowas hättest Du erwartet, wenn ich Dich recht verstanden habe.

    Generell haben die Entwickler ein sehr großes Interesse, den Code so einfach wie möglich zu machen. Je komplexer der Code wird, desto schwerer ist er zu verstehen.

    Mit den besten Grüßen,

    Konrad

    Donnerstag, 1. Dezember 2011 11:49

Alle Antworten

  • Der C# Compiler nimmt dir einfach die Arbeit ab, das private Feld, auf das getter und setter zugreifen, selbst anlegen zu müssen, d.h. statt

      private double totalPurchases;

      public double TotalPurchases {

        get { return totalPurchases; }

        set { totalPurchases = value; }

      }

    muss man nur nur noch

      public double TotalPurchases { get; set; }

    schreiben. Die Eigenschaft "TotalPurchases" benutzt man immer schon mit cust1.TotalPurchases.


    MVP Data Platform Development My blog
    Donnerstag, 1. Dezember 2011 11:25
  • Hallo Bruce,

    bezieht sich Deine Frage auf den Zugriff auf die Properties? Auf Properties greifst Du prinzipiell genau so zu, als wären es Fields / variablen.

    Also bezüglich des Zugriffs sind die beiden Definitionen identisch:
    public double TotalPurchases { get; set; }
    public double TotalPurchases;

    Der Zugriff erfolgt z.B. über ein
    cust1.TotalPurchases += 499.99;
    und es gibt keinen sichtbaren Funktionsaufruf im Code.

    Lediglich intern kommen die großen Unterschiede zum tragen. Aber das macht der Compiler alles für Dich. So wird bei Properties immer Code aufgerufen was bei einfachen Variablen nicht der Fall ist.

    Ist halt eine einache Vereinfachung. Ein Vergleich zeigt dies auch schnell. Stell Dir vor, man müsste sowas schreiben:
    cust1.TotalPurchases.Set(cust1.TotalPurchases.Get() + 499.99); // Das ist natürlich Unsinn!

    Aber sowas hättest Du erwartet, wenn ich Dich recht verstanden habe.

    Generell haben die Entwickler ein sehr großes Interesse, den Code so einfach wie möglich zu machen. Je komplexer der Code wird, desto schwerer ist er zu verstehen.

    Mit den besten Grüßen,

    Konrad

    Donnerstag, 1. Dezember 2011 11:49
  • Hallo Bruce89,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 7. Dezember 2011 13:06
    Moderator
  • Ja, danke Community, Konrad hat den Nagel auf den Kopf getroffen!, danke!


    • Bearbeitet Bruce89 Dienstag, 13. Dezember 2011 11:32
    Dienstag, 13. Dezember 2011 11:32