TOC

This article is currently in the process of being translated into German (~63% done).

Klassen:

Fields

Einer der grundlegendsten Bausteine einer Klasse ist ein Feld. Es ist eine Variable die auf Klassenebene statt auf Methodenebene definiert wird. Der Unterschied der Definitionsebene ist sehr wichtig. Hier entscheidet sich, von wo aus auf eine Variable zugegriffen werden kann: Auf eine lokale Variable (innerhalb einer Methode definiert) kann nur von dieser speziellen Methode aus zugegriffen werden. Auf ein Klassenfeld kann von allen Methoden einer Klasse und anderer Klassen zugegriffen werden, wenn die Sichtbarkeit dies zulässt.

Mit anderen Worten: der Unterschied zwischen einer Variable und einem Feld ist vor allem wo es deklariert wurde. Eine Variable auf Klassenebene bezeichnet man als Feld, während eine Variable auf Methodenebene meist nur Variable genannt wird.

Felder werden oft im Kopf einer Klasse deklariert und ihre Sichtbarkeit auf private gesetzt. (Letzteres werden wir später in diesem Kapitel behandeln.) Aussehen könnte dies etwa so:

public class FieldsSample
{
	private string name;
	....

Wir haben nun eine Variable auf Klassenebene, welche sich "name" nennt. Auf diese kann nur von allen Methoden dieser Klasse heraus zugegriffen werden, nicht von außerhalb. Dieser Schutz besteht aufgrund der Deklaration als private. Es steht Ihnen frei Ihre Felder auch als protected zu deklarieren, falls von abgeleiteten Klassen auf sie zugegriffen werden soll. Sogar eine Definition als public ist möglich, sodass von überall aus ein Zugriff auf ein Feld möglich ist. Behalten Sie jedoch unbedingt im Hinterkopf dass der übliche Weg des Zugriffs von außerhalb ausschließlich über Eigenschaften führt. Diese werden wir im nächsten Abschnitt besprechen.

In unserem obigen Beispiel wird die Variable "name" nicht mit einem Ausgangswert initalisiert. Das bedeutet, Sie müssen ihr erst einen Wert zuweisen bevor Sie sie verwenden können. Wenn Sei schon im Vorfeld wissen mit welchem Wert Ihr Feld starten soll, können Sie diesen ganz bequem gleichzeitig mit der Deklaration zuweisen.

public class FieldsSample
{
	private string name = "John Doe";
	....

Alternativ können Sie einem Feld auch im Konstruktor der Klasse einen Wert zuweisen. Dies überschreibt jedweden Wert der eventuell bei der zum Deklarationszeitpunkt zugewiesen wurde und erlaubt die Zuweisung von dynamischen Werten.

As we talked about previously, members of a class can be accessed with the dot-notation, like "class.member". However, when we are accessing a member of the current class, we use the "this" keyword, like "this.member". Here's a more complete example where we declare a couple of fields and use them inside a method:

public class Fields1
{
	private string name = "John Doe";
	private int age = 42;

	public void Describe()
	{
		string description = this.name + " is " + this.age + " years old...";
		Console.WriteLine(description);
	}
}

In the Describe() method (and don't worry, we'll get to methods in one of the next articles) we declare a local variable called "description", with a value based on our two declared fields. The "description" variable is a great example of a variable which should always be a variable and never a field: It's temporary and only relevant to the method which uses it, where the fields could easily be relevant in other methods of the class.

Zusammenfassung

Fields act a bit like global variables because they can be used to store data which can then be accessed from anywhere inside the class. They can be accessed from outside the declaring class as well, but normally, properties are used for this purpose. We'll talk about properties in the next article.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!