Properties
Betrachten wir zunächst die herkömmliche Benutzung von privaten Eigenschaften:
- class Demo
- {
- private int privateEigenschaft; //Eigenschaft (MS-Sprech: Field)
- public void setPrivateEigenschaft(int pe) //herkömmliche get-/set-Methoden
- {
- privateEigenschaft = pe;
- }
- public int getPrivateEigenschaft()
- {
- return privateEigenschaft;
- }
Datenkapselung wird durch erhöhten Aufwand beim Zugriff erkauft. Es werden get- und set-Methoden benötigt. Auch deren Benutzung ist nicht etwas umständlich:
- Demo demo = new Demo();
- //Aufrufe der set- und get-Methoden
- demo.setPrivateEigenschaft(1);
- Console.Write(demo.getPrivateEigenschaft());
Wie schön einfach ist dagegen die "schmutzige" Verwendung öffentlicher Eigenschaften:
- class Demo
- {
- ...
- public int oeffentlicheEigenschaft; //öffentliche Eigenschaft (Pfui bäh)
Auf Datenkapselung wird verzichtet, aber der Zugriff erfolgt einfach direkt und unkontrolliert ohne die Verwendung von Methoden:
- Demo demo = new Demo();
- ...
- // zum Vergleich öffentliche Eigenschaft
- // (Pfui bäh, da keine Datenkapselung)
- demo.oeffentlicheEigenschaft = 1;
- Console.Write(demo.oeffentlicheEigenschaft); // keine get- u. set-Methode nötig
Dieses Vorgehen verbietet sich von selbst!
Properties
C# bietet uns einen 3. Weg, die sogenannten Properties (dt. Eigenschaften):
- class Demo
- {
- private int privateEigenschaft;
- public int Property //Definition einer Property (C#-Sprech)
- {
- get //get-Accessor
- {
- return privateEigenschaft;
- }
- set //set-Accessor
- {
- if (privateEigenschaft < 0) //Codeergänzung möglich
- privateEigenschaft = 0;
- else
- privateEigenschaft = value;
- }
- }
Die Verwendung ist denkbar einfach:
- Demo demo = new Demo();
- ...
-
- //einfache Benutzung einer Property
- demo.Property = 1;
- Console.Write(demo.Property);
Bei einfacher Verwendung besteht dennoch die Möglichkeit, den Zugriff mittels der sogenannten set- und get-Accessoren zu kontrollieren.
Properties (dt. Eigenschaften) sind C#-spezifisch. Eigenschaften heißen in C# field (dt. Feld). Fields, Properties und Methods nennt man in C# auch member (dt. Mitglieder) einer Klasse.
Im obigen Beispiel greift die Property noch explizit auf eine bestimmte Eigenschaft zu. Properties funktionieren aber auch ohne explizit deklarierte Eigenschaften:
- class Demo
- {
- ...
- public int Property2 { get; set; } //volle Funktionalität ohne Eigenschaft
Dabei lässt sich der Zugriff durch die Accessoren auch noch einschränken:
- class Demo
- {
- ...
- public int Property3 { get; private set; } // Einschränkung des Zugriffs
Die Verwendung von property3 ist nun nur eingeschränkt möglich:
- Demo demo = new Demo();
- ...
-
- demo.Property2 = 1; // okay
- Console.WriteLine(demo.Property2); // okay
-
demo.Property3 = 3;// nicht möglich, da set-Accessor privat - Console.Write(demo.Property3); // funktioniert, da get-Accessor public ist
Tipp: Nutzen der Code-Vervollständigung von Visual Studio: Geben Sie z.B. prop, propfull oder propg gefolgt von einem Tabulator ein!