Zum Fußzeileninhalt springen
Iron Academy Logo
Lernen Sie C#
Lernen Sie C#

Andere Kategorien

Verstehen von C#-Eigenschaften

Tim Corey
9m 50s

C# 11, das mit .NET 7 eingeführt wurde, hat eine interessante Ergänzung zu den Eigenschaften gebracht: das Schlüsselwort required. In diesem Artikel werden wir C#-Eigenschaften anhand von Beispielen aus Tim Coreys prägnantem Video-Tutorial zu ".NET 7 Update: Required Properties in 10 Minutes or Less". Wir erläutern alles, von den Grundlagen der Eigenschaften bis hin zum neuen Schlüsselwort required und wie es hilft, Initialisierungsregeln durchzusetzen.

C# Eigenschaften

In C# ermöglichen Eigenschaften die Kapselung von Feldern und die Verwaltung des Zugriffs auf die Datenelemente einer Objektklasse. Sie werden in der Regel verwendet, um die Datenintegrität zu gewährleisten und gleichzeitig einen externen Zugriff zu ermöglichen. Ein privates Feld kann mithilfe von Eigenschaften gekapselt werden und bietet so die Kontrolle darüber, wie auf Daten zugegriffen wird oder wie sie geändert werden. Öffentliche String-Eigenschaften verwenden oft spezielle Methoden, die Accessors genannt werden (get und set), um Klassenmitglieder effizient zu manipulieren. Auf eine statische Eigenschaft in C# kann zugegriffen werden, ohne die Klasse zu instanziieren, was eine einzigartige Möglichkeit zur Verwaltung von Eigenschaftswerten darstellt.

Hier zeigt Tim, wie er ein einfaches Beispiel für eine Eigenschaft einrichtet.

Erstellen einer Konsolenanwendung

Zunächst beginnt Tim mit einer grundlegenden .NET 7-Konsolenanwendung, die C# 11 verwendet. Diese Version führt das erforderliche Schlüsselwort ein, das in früheren Versionen von .NET nicht verfügbar ist.

Definieren eines einfachen Modells

Tim erstellt eine PersonModel Klasse mit Eigenschaften für FirstName und LastName:

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Diese Eigenschaften ermöglichen es PersonModel, Vor- und Nachnamen zu speichern. Ohne weitere Einrichtung könnten FirstName und LastName jedoch möglicherweise nicht initialisiert sein, was zu null-Werten führen könnte.

Verwendung von Konstruktoren zur Sicherstellung der Initialisierung

Eine gängige Methode, um sicherzustellen, dass Eigenschaften immer initialisiert werden, ist ein Konstruktor. In Tims Beispiel fügt er der Basisklasse von PersonModel einen Konstruktor hinzu, der sowohl FirstName als auch LastName erfordert:

public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

Dieser Ansatz erzwingt, dass immer wenn ein PersonModel Objekt erstellt wird, sowohl FirstName als auch LastName angegeben werden müssen. Wenn wir versuchen würden, ein PersonModel ohne Angabe dieser Werte zu erstellen, würde der Compiler dies als Fehler kennzeichnen.

Nullbarer Kontext

Beginnend mit .NET 6 und C# 10 hat C# Null-Referenztypen eingeführt. Dies bedeutet, dass Eigenschaften entweder initialisiert oder ausdrücklich als null-markiert gekennzeichnet werden müssen, indem ein ? verwendet wird. Zum Beispiel, wenn FirstName und LastName null sein können, würden wir sie wie folgt definieren:

public string? FirstName { get; set; }
public string? LastName { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }

In Tims Beispiel gehen wir jedoch davon aus, dass FirstName und LastName immer nicht-null sein sollten. Ursprünglich wurde die Nullbarkeit durch sorgfältige Initialisierung oder nullable annotations gehandhabt, aber mit C# 11 haben wir nun robustere Optionen.

Einführung in das erforderliche Schlüsselwort

Während Konstruktoren die Initialisierung erzwingen können, führt C# 11 das Keyword required ein, das es einfacher macht, sicherzustellen, dass bestimmte Eigenschaften gesetzt sind. Mit required können Sie einzelne Eigenschaften als erforderlich markieren, was bedeutet, dass sie während der Objektinitialisierung zugewiesen werden müssen.

Einstellen der erforderlichen Eigenschaften

Um FirstName und LastName zu erforderlichen Eigenschaften zu machen, ändert Tim um 4:15 die PersonModel Klasse wie folgt:

public class PersonModel
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}
public class PersonModel
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

Durch die Kennzeichnung dieser Eigenschaften mit required wird der Compiler nun erzwingen, dass sie entweder über einen Objektinitialisierer oder einen Konstruktor gesetzt werden. Dies ist nützlich, weil Sie damit bestimmte Eigenschaften anfordern können, ohne einen Konstruktor erstellen zu müssen.

Benutzungsbeispiel mit erforderlichen Eigenschaften

Nun können wir PersonModel wie folgt erstellen und initialisieren:

PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };
PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };

Wenn wir FirstName oder LastName auslassen, wird der Compiler einen Fehler markieren und uns auffordern, diese erforderlichen Eigenschaften zu initialisieren.

Verwendung mit Konstruktoren erforderlich

Tim demonstriert einen Fall, in dem sowohl required Eigenschaften als auch Konstruktoren verwendet werden. In Situationen, in denen Sie einen Konstruktor haben, der erforderliche Eigenschaften festlegt, muss C# sicherstellen, dass diese Eigenschaften noch initialisiert sind, wenn der Konstruktor aufgerufen wird.

In solchen Fällen kann das SetsRequiredMembers Attribut verwendet werden, um anzuzeigen, dass der Konstruktor die erforderlichen Bedingungen erfüllt. Hier ist, wie Tim es anwendet:

[SetsRequiredMembers]
public PersonModel()
{
    FirstName = "Test";
    LastName = "Test";
}

[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}
[SetsRequiredMembers]
public PersonModel()
{
    FirstName = "Test";
    LastName = "Test";
}

[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

Das Hinzufügen von SetsRequiredMembers informiert den Compiler, dass diese Eigenschaften innerhalb des Konstruktors gesetzt werden, wodurch Initialisierungsfehler vermieden werden. Diese Funktion hilft, versehentliche Auslassungen zu vermeiden, und ermöglicht gleichzeitig Flexibilität bei der Initialisierung von Eigenschaften.

Warum erforderliche Eigenschaften nützlich sind

Tim erklärt, dass das neue required Schlüsselwort den Prozess optimiert, um sicherzustellen, dass Eigenschaften immer gesetzt sind. Anstatt in jedem Fall Konstruktoren für Set-Methoden zu benötigen oder zu riskieren, dass Eigenschaften nicht gesetzt werden, gibt es jetzt eine unkomplizierte Möglichkeit, bestimmte Werte direkt in der Eigenschaftsdeklaration zu verlangen.

Diese Funktion eignet sich hervorragend für Datenmodelle, bei denen bestimmte Felder obligatorisch sind, und kann dazu beitragen, Probleme frühzeitig im Entwicklungsprozess zu erkennen, indem Laufzeit-Nullfehler vermieden werden.

Beispiel für zusätzliche Eigenschaften

Tim fügte dann eine optionale Eigenschaft hinzu, Email, die null sein kann:

public string? Email { get; set; }
public string? Email { get; set; }

Da es nicht mit required markiert ist, kann die Email Eigenschaft ungelassen bleiben, ohne einen Compilerfehler zu verursachen. Anhand dieses Beispiels demonstrierte Tim die Flexibilität, die es für eine Klasse mit einer klaren Unterscheidung zwischen wesentlichen und optionalen Datenfeldern bietet.

Abschluss

Die Hinzufügung von erforderlichen Eigenschaften in C# 11 ist eine wertvolle Funktion für Entwickler, die sicherstellt, dass wichtige Eigenschaften immer initialisiert werden. Das Video von Tim Corey bietet eine hervorragende Einführung in diese Funktion und demonstriert, wie sie in einer Konsolenanwendung funktioniert. Durch die Kombination des required Schlüsselworts mit Objektinitialisierern und Konstruktoren können wir robustere und sicherere Datenmodelle in C# erstellen. Für weitere informative Tutorials besuchen Sie bitte Tims YouTube-Kanal.

Hero Worlddot related to Verstehen von C#-Eigenschaften
Hero Affiliate related to Verstehen von C#-Eigenschaften

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an