Passer au contenu du pied de page
Iron Academy Logo
Apprendre le C#
Apprendre le C#

Autres catégories

Comprendre les propriétés C#

Tim Corey
9m 50s

C# 11, introduit avec .NET 7, a apporté un ajout intéressant aux propriétés : le mot-clé required. Dans cet article, nous allons explorer les propriétés C#, en utilisant des exemples tirés du tutoriel vidéo concis de Tim Corey sur "Mise à jour .NET 7 : Propriétés requises en 10 minutes ou moins". Nous aborderons tous les sujets, depuis les bases des propriétés jusqu'au nouveau mot-clé required et à la manière dont il permet d'appliquer les règles d'initialisation.

Propriétés C

En C#, les propriétés permettent d'encapsuler des champs et de gérer l'accès aux membres de données de la classe d'un objet. Ils sont couramment utilisés pour garantir l'intégrité des données tout en permettant un accès externe. Un champ privé peut être encapsulé à l'aide de propriétés, ce qui permet de contrôler la manière dont les données sont consultées ou modifiées. Les propriétés publiques des chaînes de caractères utilisent souvent des méthodes spéciales appelées accesseurs (get et set) pour manipuler efficacement les membres de la classe. Une propriété statique en C# est accessible sans instancier la classe, ce qui offre un moyen unique de gérer les valeurs des propriétés.

Voici comment Tim met en place un exemple de propriété simple pour faire la démonstration.

Créer une application console

Tout d'abord, Tim commence par une application console .NET 7 de base utilisant C# 11. Cette version introduit le mot-clé requis, qui n'est pas disponible dans les versions précédentes de .NET.

Définition d'un modèle simple

Tim crée une classe PersonModel avec des propriétés pour FirstName et 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; }
}

Ces propriétés permettent à PersonModel de stocker les prénoms et noms de famille. Cependant, sans configuration supplémentaire, FirstName et LastName pourraient potentiellement être laissés non initialisés, entraînant des valeurs nulles.

Utilisation de constructeurs pour assurer l'initialisation

Un moyen courant de s'assurer que les propriétés sont toujours initialisées est d'utiliser un constructeur. Dans l'exemple de Tim, il ajoute un constructeur à la classe de base de PersonModel qui nécessite à la fois FirstName et LastName :

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

Cette approche impose que chaque fois qu'un objet PersonModel est créé, les FirstName et LastName doivent être fournis. Si nous essayions de créer un PersonModel sans spécifier ces valeurs, le compilateur le signalerait comme une erreur.

Contexte annulable

À partir de .NET 6 et C# 10, C# a introduit les types de référence nullable. Cela signifie que les propriétés doivent être soit initialisées, soit explicitement marquées comme nullable à l'aide d'un ?. Par exemple, si FirstName et LastName peuvent être nulles, nous les définirions de la manière suivante :

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

Dans l'exemple de Tim, cependant, nous supposons que FirstName et LastName devraient toujours être non-nulles. Initialement, la nullité était gérée par une initialisation prudente ou des annotations nullables, mais avec C# 11, nous disposons d'options plus robustes.

Introduction du mot-clé requis

Bien que les constructeurs puissent imposer l'initialisation, C# 11 introduit le mot-clé required, facilitant la garantie que des propriétés spécifiques sont définies. Avec required, vous pouvez marquer des propriétés individuelles comme requises, ce qui signifie qu'elles doivent être affectées à une valeur lors de l'initialisation de l'objet.

Configuration des propriétés requises

Pour rendre FirstName et LastName des propriétés requises, Tim à 4:15 modifie la classe PersonModel comme suit :

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; }
}

En marquant ces propriétés avec required, le compilateur imposera désormais qu'elles soient définies soit par un initialiseur d'objet, soit par un constructeur. Cette méthode est utile car elle vous permet d'exiger des propriétés spécifiques sans avoir à créer un constructeur.

Exemple d'utilisation avec propriétés requises

À présent, nous pouvons créer et initialiser PersonModel de la manière suivante :

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

Si nous omettons FirstName ou LastName, le compilateur indiquera une erreur, nous incitant à initialiser ces propriétés requises.

Utilisation requise avec les constructeurs

Tim démontre un cas où à la fois les propriétés required et les constructeurs sont utilisés. Dans les situations où vous avez un constructeur qui définit des propriétés requises, C# doit s'assurer que ces propriétés sont toujours initialisées lorsque le constructeur est appelé.

Dans de tels cas, l'attribut SetsRequiredMembers peut être utilisé pour signaler que le constructeur remplit les conditions requises. Voici comment Tim l'applique :

[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;
}

Ajouter SetsRequiredMembers informe le compilateur que ces propriétés seront définies dans le constructeur, évitant ainsi les erreurs d'initialisation. Cette fonctionnalité permet d'éviter les omissions accidentelles tout en offrant une certaine flexibilité dans la manière dont les propriétés sont initialisées.

Pourquoi les propriétés requises sont utiles

Tim explique que le nouveau mot-clé required simplifie le processus pour s'assurer que les propriétés sont toujours définies. Au lieu d'avoir besoin de constructeurs pour les méthodes set dans tous les cas ou de risquer des propriétés non définies, nous disposons désormais d'un moyen simple d'exiger des valeurs spécifiques directement dans la déclaration de la propriété.

Cette fonctionnalité est particulièrement utile dans les modèles de données où certains champs sont obligatoires et peut aider à détecter les problèmes à un stade précoce du processus de développement en évitant les erreurs d'exécution de type "null".

Exemple de propriétés supplémentaires

Tim a ensuite ajouté une propriété optionnelle, Email, qui peut être nullable :

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

Puisqu'elle n'est pas marquée avec required, la propriété Email peut rester non définie sans provoquer d'erreur de compilateur. Avec cet exemple, Tim a démontré la flexibilité qu'il permet pour une classe avec une distinction claire entre les champs de données essentiels et facultatifs.

Conclusion

L'ajout de propriétés requises dans C# 11 est une fonctionnalité précieuse pour les développeurs, garantissant que les propriétés essentielles sont toujours initialisées. La vidéo de Tim Corey constitue une excellente introduction à cette fonctionnalité et montre comment elle fonctionne dans une application console. En combinant le mot-clé required avec des initialiseurs d'objet et des constructeurs, nous pouvons créer des modèles de données plus robustes et plus sûrs en C#. Pour d'autres tutoriels instructifs, visitez la chaîne YouTube de Tim .

Hero Worlddot related to Comprendre les propriétés C#
Hero Affiliate related to Comprendre les propriétés C#

Gagnez plus en partageant ce que vous aimez

Vous créez du contenu pour les développeurs travaillant avec .NET, C#, Java, Python ou Node.js ? Transformez votre expertise en revenu supplémentaire !

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi