Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Im ersten Teil dieser Artikelreihe haben wir uns die Grundlagen zur objektorientierten Programmierung mit C# angesehen – zum Beispiel die Klasse Program, das Erstellen neuer Klassen, die Verwendung von Eigenschaften und von Methoden. Dies greifen wir im zweiten Teil auf und gehen auf verschiedene Arten der Eigenschaftsdefinition, Kontruktoren, aufgeteilte Klassen, Objektreferenzen, Überladung von Methoden und verschiedene Parameter-Techniken ein.
Öffentliche Variablen oder “Felder”
Wenn eine Eigenschaft einer Klasse nur gelesen und geschrieben werden soll, ohne dass beim Lesen oder Schreiben weitere Aktionen erfolgen sollen, können Sie diese theoretisch einfach als öffentliche Variable deklarieren:
class Person_VornameOeffentlich { public string Vorname; }
Sie greifen dann lesend und schreibend auf die Variable zu:
public void OeffentlicheVariableTesten() { Person_VornameOeffentlich person = new Person_VornameOeffentlich(); person.Vorname = "André"; Console.WriteLine("Vorname: {0}", person.Vorname); }
Eine solche Variable/Eigenschaft nennt man auch Feld.
Eigenschaft kapseln
Meist ist aber kein derart unkontrollierter Zugriff auf eine solche Variable erwünscht. Dann deklariert man die Variable als private Variable und erstellt eine öffentliche Eigenschaft, die einen get– und einen set-Block enthält. In der Kurzform sieht dies so aus:
private string vorname;
Dies ist die öffentliche Variable mit dem get– und dem set-Block – get liefert den aktuellen Wert der privaten Variablen vorname aus und set stellt diesen beim Zuweisen eines Wertes für die Eigenschaft auf den Inhalt der Variablen value ein:
public string Vorname { get { return vorname; } set { vorname = value; } }
Damit halten Sie sich die Möglichkeit offen, den Wert der Eigenschaft auch innerhalb der Klasse für andere Zwecke einzusetzen – etwa für Berechnungen weiterer Eigenschaftswerte oder zum Zusammensetzen von Ausdrücken. Gegebenenfalls benötigen Sie dies gar nicht und wollen nur von außen den Wert der Eigenschaft eintragen und diesen später wieder auslesen.
Ein weiterer Vorteil der Kapselung ist: Sie können damit auch festlegen, dass eine Eigenschaft nur schreibend oder nur lesend genutzt werden kann. Wenn die Eigenschaft Vorname beispielsweise nur lesend genutzt werden soll, lassen Sie einfach den set-Teil weg:
public string Vorname { get { return vorname; } }
Für einen ausschließlich schreibenden Zugriff bleibt hingegen der get-Teil außen vor:
public string Vorname { set { vorname = value; } }
Getter und Setter schnell erstellen
Benötigen Sie get– und set-Block, wollen aber keine Einschränkungen vornehmen wie etwa eine Prüfung der Eingabe und benötigen auch keine Variable, auf die Sie von der Klasse aus zugreifen wollen, können Sie diese verkürzte Variante nutzen:
class Person_AutomatischImplementiert { public string Vorname { get; set; } public string Nachname { get; set; } }
Der Zugriff auf die beiden Eigenschaften der Klasse erfolgt dann genau wie bei der vorherigen Version.
Unterstützung durch Visual Studio
Beim schnellern Erstellen von Eigenschaften unterstützt Visual Studio Sie mit Shortcuts. Dazu geben Sie in einer leeren Zeile in der gewünschten Klasse zunächst die vier Buchstaben prop ein. Nun erscheinen bereits weiterführende Möglichkeiten in der IntelliSense-Liste (siehe Bild 1). Für uns sind aktuell zwei Varianten interessant. Die erste erfordert die Eingabe von prop + Tab + Tab und liefert die folgende Vorlage:
Bild 1: Schnelles Erstellen einer Property
public int MyProperty { get; set; }
Dabei werden int und MyProperty gelb hinterlegt und können mit der Tabulator-Taste durchlaufen werden. Auf diese Weise können Sie die Platzhalter leicht durch den Datentyp und den Namen der Eigenschaft ersetzen.
Die zweite Variante ist die Eingabe von propfull + Tab + Tab (es reicht auch propf + Tab + Tab aus). Dies liefert die folgende Vorlage:
private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } }
Hier können Sie den Datentyp (int), den Variablennamen (myVar) und den Eigenschaftsnamen (MyProperty) per Tabulatortaste erreichen und ändern.
Klassen mit Konstruktor
Unter VBA gibt es keine Möglichkeit, gleich beim Erstellen einer Klasse einen oder mehrere Werte zu übergeben. Dazu muss man nach dem Erstellen dafür vorgesehene Eigenschaften nutzen. Das ist schon ein Nachteil, wenn für das Verwenden der Klasse bestimmte Pflichtinformationen übergeben werden müssen, bevor man etwa bestimmte Methoden dieser Klasse nutzt.
Das heißt, dass man vor dem Ausführen der Methode immer noch prüfen muss, ob die Pflichtinformationen überhaupt übergeben wurden. Davon abgesehen ist es natürlich auch viel einfacher, die wichtigsten Eigenschaften gleich beim Initialisieren des Objekts zu übergeben statt mühsam Eigenschaft für Eigenschaft zu übergeben.
Unter C# und anderen objektorientierten Programmiersprachen gibt es deshalb die sogenannten Konstruktoren. Das sind Parameter, die gleich beim Erstellen einer Klasse übergeben werden müssen beziehungsweise können.