Menu
Coddy logo textTech

Felder vs. Eigenschaften

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 6 von 70.

Felder sind Variablen, die direkt in einer Klasse deklariert werden. Properties sind Member, die mithilfe von get- und set-Accessoren einen kontrollierten Zugriff auf Felder ermöglichen.

Felder speichern Daten direkt

public class Person
{
    // Felder - direkte Variablenspeicherung
    private string name;
    private int age;
}

Eigenschaften bieten kontrollierten Zugriff mit get und set

public class Person
{
    private string name;
    
    // Eigenschaft mit Backing-Field
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Automatisch implementierte Eigenschaften (Kurzschreibweise)

public class Person
{
    // Automatisch implementierte Eigenschaft
    public string Name { get; set; }
    public int Age { get; set; }
}

Eigenschaften können Validierungslogik enthalten

public class Person
{
    private int age;
    
    public int Age
    {
        get { return age; }
        set 
        { 
            if (value >= 0 && value <= 120)
                age = value;
        }
    }
}

Schreibgeschützte Eigenschaft (nur get-Accessor)

public class Circle
{
    private double radius;
    
    public double Radius
    {
        get { return radius; }
    }
    
    // Schreibgeschützte berechnete Eigenschaft
    public double Area
    {
        get { return Math.PI * radius * radius; }
    }
}

Felder sind in der Regel privat und der Zugriff erfolgt über Eigenschaften. Eigenschaften ermöglichen es Ihnen, Logik, Validierung und Kontrolle darüber hinzuzufügen, wie auf Daten zugegriffen wird oder wie diese geändert werden. Automatisch implementierte Eigenschaften sind praktisch, wenn Sie keine zusätzliche Logik benötigen.

challenge icon

Aufgabe

Mittel

Erstellen Sie eine BankAccount-Klasse, die den Unterschied zwischen Feldern und Eigenschaften demonstriert:

  • Ein privates balance-Feld zum Speichern des Kontostands
  • Eine automatisch implementierte Eigenschaft AccountName
  • Eine schreibgeschützte Eigenschaft Balance, die das balance-Feld zurückgibt
  • Methoden Deposit und Withdraw, die das private Feld ändern

Spickzettel

Felder sind Variablen, die direkt in einer Klasse deklariert werden, während Eigenschaften einen kontrollierten Zugriff auf Felder über get- und set-Accessoren ermöglichen.

Felder speichern Daten direkt:

public class Person
{
    private string name;
    private int age;
}

Eigenschaften bieten kontrollierten Zugriff mit get und set:

public class Person
{
    private string name;
    
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Automatisch implementierte Eigenschaften (Kurzschreibweise):

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Eigenschaften mit Validierungslogik:

public int Age
{
    get { return age; }
    set 
    { 
        if (value >= 0 && value <= 120)
            age = value;
    }
}

Schreibgeschützte Eigenschaft (nur get-Accessor):

public double Area
{
    get { return Math.PI * radius * radius; }
}

Felder sind in der Regel privat und der Zugriff erfolgt über Eigenschaften. Eigenschaften ermöglichen es Ihnen, Logik, Validierung und Kontrolle darüber hinzuzufügen, wie auf Daten zugegriffen oder wie diese geändert werden.

Probier es selbst

using System;

class Program
{
    static void Main()
    {
        string accountName = Console.ReadLine();
        decimal initialBalance = decimal.Parse(Console.ReadLine());
        decimal depositAmount = decimal.Parse(Console.ReadLine());
        
        BankAccount account = new BankAccount(accountName, initialBalance);
        
        Console.WriteLine($"Account: {account.AccountName}");
        Console.WriteLine($"Initial Balance: ${account.Balance}");
        
        account.Deposit(depositAmount);
        Console.WriteLine($"After Deposit: ${account.Balance}");
        
        string result = account.Withdraw(2000);
        Console.WriteLine($"Withdraw attempt: {result}");
        Console.WriteLine($"Final Balance: ${account.Balance}");
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung