C# Properties: Get/Set-Zugriff, Automatische Properties & Best Practices
Was sind Properties?
Properties sind Member, die einen flexiblen Mechanismus zum Lesen, Schreiben oder Berechnen von Werten privater Felder bereitstellen. Sie sind syntaktisch wie Felder nutzbar, aber intern Methoden (Accessors).
Syntax: Klassische Property mit Backing Field
public class Student
{
private string name = "N/A"; // Backing Field
public string Name
{
get => name; // Lesezugriff
set => name = value; // Schreibzugriff (value = zugewiesener Wert)
}
}
// Nutzung
var s = new Student();
s.Name = "Zara"; // set
Console.WriteLine(s.Name); // get → "Zara"
Automatische Properties (Auto-Implemented Properties, C# 3+)
Compiler generiert unsichtbares Backing Field:
public class Student
{
public string Name { get; set; } = "N/A"; // Initialisierung (C# 6+)
public int Age { get; set; }
}
Zugriffsmodifizierer für Accessors (C# 2+)
Getter und Setter können unterschiedliche Sichtbarkeit haben:
public string Name { get; private set; } // Lesen public, Schreiben nur in Klasse
public string Id { get; } // Read-only (nur get, init via Konstruktor)
Read-only & Init-only Properties
get;only → Unveränderlich nach Konstruktor (C# 6+).initSetter (C# 9+) → Setzbar bei Objektinitialisierung, danach read-only:public string Name { get; init; } var s = new Student { Name = "Zara" }; // OK // s.Name = "Other"; // Compiler-Fehler
Berechnete Properties (ohne Backing Field)
public class Rectangle
{
public double Width { get; set; }
public double Height { get; set; }
public double Area => Width * Height; // Expression-bodied (read-only)
}
Properties in Interfaces & Abstrakten Klassen
public interface IEntity
{
int Id { get; set; }
}
public abstract class EntityBase : IEntity
{
public abstract int Id { get; set; } // Abstract Property
}
Überladung von Properties? Nein.
Properties können nicht überladen werden (gleicher Name, andere Signatur). Nutzen Sie indizierte Properties (Indexer) oder Methoden.
Best Practices
- Felder immer private halten; nach außen via Properties.
- Automatische Properties bevorzugen, außer Logik in Get/Set nötig (Validierung, Lazy-Load, Change-Notification).
- Für
INotifyPropertyChanged(WPF/MAUI/MVVM)set { if (field != value) { field = value; OnPropertyChanged(); } }. - Keine teuren Operationen / I/O in Gettern (Erwartung: schnelle, nebenwirkungsfreie Lesezugriffe).
- Sammlungen als
IReadOnlyList<T>oderIEnumerable<T>exponieren, nichtList<T>.
C Sprache
- Silbers antimikrobielle Kraft: Wie das Metall Bakterien, Pilze und Viren bekämpft
- Arithmetische Eigenschaften: Assoziativ, Kommutativ & Distributiv erklärt
- Potenzgesetze: Wichtige Eigenschaften für algebraische Manipulation
- Molybdän-Hafnium-Kohlenstoff (MHC): Hochtemperatur-Legierung mit Partikelverstärkung
- AMPCO® 25 Schmiedestücke: Hochleistungslegierung für anspruchsvolle Werkzeuganwendungen
- UGICHROM® 4462: Hochleistungs-Mikroriss-Chromschichtung für Hydraulik & Pneumatik
- UGICHROM® 4362 – Premium Mikroriss-Verchromter Duplex-Edelstahl für Hydraulik & Pneumatik
- Bainidur® 1300 – Rissarmes, hochfestes Schmiedelegierung für anspruchsvolle Prozesse
- Bainidur® 7980 CN: Premium-Niedriglegierter Stahl für optimales Einsatzhärten & Carbonitrieren
- UGICHROM® 4460: Ultra-haltbare chrombeschichtete Edelstähle für hydraulische & pneumatische Anwendungen