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.
Aufgabe
MittelErstellen 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
DepositundWithdraw, 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}");
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten