Felder (C#-Programmierhandbuch)Fields (C# Programming Guide)

Ein Feld ist eine Variable eines beliebigen Typs, die direkt in einer class oder struct deklariert ist.A field is a variable of any type that is declared directly in a class or struct. Felder sind Member Ihres enthaltenden Typs.Fields are members of their containing type.

Eine Klasse oder Struktur kann möglicherweise über Instanzenfelder, statische Felder oder beides verfügen.A class or struct may have instance fields or static fields or both. Instanzenfelder sind für eine Instanz eines Typs spezifisch.Instance fields are specific to an instance of a type. Wenn Sie eine Klasse T mit einem Instanzenfeld F haben, können Sie zwei Objekte vom Typ T erstellen und den Wert von F in jedem Objekt ändern, ohne dabei den Wert in dem anderen Objekt zu beeinflussen.If you have a class T, with an instance field F, you can create two objects of type T, and modify the value of F in each object without affecting the value in the other object. Im Gegensatz dazu gehört ein statisches Feld zur Klasse selbst und wird in allen Instanzen dieser Klasse gemeinsam verwendet.By contrast, a static field belongs to the class itself, and is shared among all instances of that class. Änderungen, die von der Instanz A vorgenommen wurden, werden für die Instanzen B und C direkt sichtbar, sobald sie auf das Feld zugreifen.Changes made from instance A will be visibly immediately to instances B and C if they access the field.

Im Allgemeinen sollten Sie Felder nur für Variablen verwenden, die private oder geschützte Zugriffsmöglichkeiten haben.Generally, you should use fields only for variables that have private or protected accessibility. Daten, die Ihre Klasse für Clientcode verfügbar macht, sollten über Methoden, Eigenschaften und Indexer bereitgestellt werden.Data that your class exposes to client code should be provided through methods, properties and indexers. Sie können sich mit diesen Konstrukten für indirekten Zugriff auf interne Felder vor ungültigen Eingabewerten schützen.By using these constructs for indirect access to internal fields, you can guard against invalid input values. Ein privates Feld, das über eine öffentliche Eigenschaft bereitgestellte Daten speichert, wird als Sicherungsspeicher oder Unterstützungsfeld bezeichnet.A private field that stores the data exposed by a public property is called a backing store or backing field.

Felder speichern in der Regel die Daten, die über Zugriff auf mehr als eine Klassenmethode verfügen müssen und länger als die Lebensdauer einer einzelnen Methode gespeichert werden müssen.Fields typically store the data that must be accessible to more than one class method and must be stored for longer than the lifetime of any single method. Z.B. verfügt eine Klasse, die ein Kalenderdatum darstellt, möglicherweise über drei Felder: Jeweils eines für Monat, Tag und Jahr.For example, a class that represents a calendar date might have three integer fields: one for the month, one for the day, and one for the year. Variablen, die außerhalb des Bereichs einer einzelnen Methode nicht verwendet werden, sollten als lokale Variablen innerhalb des Methodentexts selbst deklariert werden.Variables that are not used outside the scope of a single method should be declared as local variables within the method body itself.

Felder werden innerhalb des Class-Blocks deklariert, indem Sie die Zugriffsebene des Felds, gefolgt vom Typ des Felds, gefolgt vom Namen des Felds angeben.Fields are declared in the class block by specifying the access level of the field, followed by the type of the field, followed by the name of the field. Zum Beispiel:For example:

public class CalendarEntry
{
    // private field
    private DateTime date;

    // public field (Generally not recommended.)
    public string day;

    // Public property exposes date field safely.
    public DateTime Date 
    {
        get 
        {
            return date;
        }
        set 
        {
            // Set some reasonable boundaries for likely birth dates.
            if (value.Year > 1900 && value.Year <= DateTime.Today.Year)
            {
                date = value;
            }
            else
                throw new ArgumentOutOfRangeException();
        }

    }

    // Public method also exposes date field safely.
    // Example call: birthday.SetDate("1975, 6, 30");
    public void SetDate(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        // Set some reasonable boundaries for likely birth dates.
        if (dt.Year > 1900 && dt.Year <= DateTime.Today.Year)
        {
            date = dt;
        }
        else
            throw new ArgumentOutOfRangeException();
    }

    public TimeSpan GetTimeSpan(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt != null && dt.Ticks < date.Ticks)
        {
            return date - dt;
        }
        else
            throw new ArgumentOutOfRangeException();  

    }
}

Um auf ein Feld in einem Objekt zuzugreifen, fügen Sie einen Punkt hinter dem Objektnamen ein, gefolgt vom Namen des Felds, wie in objectname.fieldname.To access a field in an object, add a period after the object name, followed by the name of the field, as in objectname.fieldname. Zum Beispiel:For example:

CalendarEntry birthday = new CalendarEntry();
birthday.day = "Saturday";

Einem Feld kann ein Anfangswert durch Verwendung des Zuweisungsoperators zugewiesen werden, wenn das Feld deklariert wird.A field can be given an initial value by using the assignment operator when the field is declared. Sie würden z.B. day wie im folgenden Beispiel deklarieren, um das day-Feld automatisch "Monday" zuzuweisen:To automatically assign the day field to "Monday", for example, you would declare day as in the following example:

public class CalendarDateWithInitialization
{
    public string day = "Monday";
    //...
}

Felder werden umgehend initialisiert, bevor der Konstruktor für die Objektinstanz aufgerufen wird.Fields are initialized immediately before the constructor for the object instance is called. Wenn der Konstruktor den Wert eines Felds zuweist, überschreibt er jeden während der Felddeklaration angegebenen Wert.If the constructor assigns the value of a field, it will overwrite any value given during field declaration. Weitere Informationen finden Sie unter Verwenden von Konstruktoren.For more information, see Using Constructors.

Hinweis

Ein Feldinitialisierer kann nicht auf andere Instanzfelder verweisen.A field initializer cannot refer to other instance fields.

Felder können als öffentlichen, private, geschützt, interne, geschützte interne oder privaten, geschützten.Fields can be marked as public, private, protected, internal, protected internal or private protected. Diese Zugriffsmodifizierer definieren, wie Benutzer der Klasse auf die Felder zugreifen können.These access modifiers define how users of the class can access the fields. Weitere Informationen finden Sie unter Zugriffsmodifizierer.For more information, see Access Modifiers.

Ein Feld kann optional als static deklariert werden.A field can optionally be declared static. Dadurch steht das Feld Aufrufern jederzeit zur Verfügung, auch wenn keine Instanz der Klasse vorhanden ist.This makes the field available to callers at any time, even if no instance of the class exists. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember.For more information, see Static Classes and Static Class Members.

Ein Feld kann als readonly deklariert werden.A field can be declared readonly. Einem schreibgeschützten Feld kann nur ein Wert während der Initialisierung oder in einem Konstruktor zugewiesen werden.A read-only field can only be assigned a value during initialization or in a constructor. Ein static``readonly-Feld ist einer Konstanten sehr ähnlich, außer dass der C#-Compiler nicht auf den Wert eines statischen schreibgeschützten Felds zur Kompilierzeit, sondern nur zur Laufzeit zugreifen kann.A static``readonly field is very similar to a constant, except that the C# compiler does not have access to the value of a static read-only field at compile time, only at run time. Weitere Informationen finden Sie unter Konstanten.For more information, see Constants.

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Klassen und StrukturenClasses and Structs
Verwenden von KonstruktorenUsing Constructors
VererbungInheritance
ZugriffsmodifiziererAccess Modifiers
Abstrakte und versiegelte Klassen und KlassenmemberAbstract and Sealed Classes and Class Members