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 erlauben PersonModel, Vor- und Nachnamen zu speichern. Ohne zusätzliche Einrichtung könnten FirstName und LastName jedoch potenziell nicht initialisiert werden, was zu null-Werten führen kann.

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 wann immer ein PersonModel-Objekt erstellt wird, sowohl FirstName als auch LastName bereitgestellt werden müssen. Wenn wir versuchen, ein PersonModel zu erstellen, ohne diese Werte anzugeben, würde der Compiler dies als Fehler markieren.

Nullbarer Kontext

Seit .NET 6 und C# 10 hat C# nullable Referenztypen eingeführt. Das bedeutet, dass Eigenschaften entweder initialisiert oder explizit mit einem ? als nullable markiert werden müssen. Zum Beispiel, wenn FirstName und LastName null sein können, würden wir sie folgendermaßen definieren:

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

In Tims Beispiel nehmen wir jedoch an, 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 required-Schlüsselwort 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 einen Wert erhalten müssen.

Einstellen der erforderlichen Eigenschaften

Um FirstName und LastName als erforderliche Eigenschaften zu machen, modifiziert 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 das Markieren 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

Jetzt 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 weglassen, wird der Compiler einen Fehler markieren und uns auffordern, diese erforderlichen Eigenschaften zu initialisieren.

Verwendung mit Konstruktoren erforderlich

Tim demonstriert einen Fall, bei 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 im Konstruktor gesetzt werden, um Initialisierungsfehler zu vermeiden. 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 vereinfacht, 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ügt dann eine optionale Eigenschaft hinzu, Email, die nullable sein kann:

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

Da sie 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