Maison > développement back-end > C++ > Pourquoi ne puis-je pas initialiser un champ de classe à l'aide d'un autre champ non statique ?

Pourquoi ne puis-je pas initialiser un champ de classe à l'aide d'un autre champ non statique ?

Linda Hamilton
Libérer: 2025-01-01 10:48:10
original
437 Les gens l'ont consulté

Why Can't I Initialize a Class Field Using Another Non-Static Field?

Comprendre les initialiseurs de champs dans les instances de classe

Lors de la conception de classes, il est crucial d'initialiser les champs avec des valeurs appropriées, en particulier les champs non statiques. Ce message d'erreur : "Un initialiseur de champ ne peut pas faire référence au champ, à la méthode ou à la propriété non statique" s'affiche lorsque vous tentez d'initialiser une variable d'instance dans une classe en accédant directement aux membres de la classe non statiques.

Dans Dans votre cas spécifique, la classe Service contient un champ initialisé avec une instance de la classe DinnerRepository et une affectation ultérieure d'un objet Dinner récupéré. Cependant, cette approche conduit à l'erreur susmentionnée.

Solutions alternatives à l'initialisation de champ

Une alternative à l'initialisation de champ consiste à utiliser des constructeurs d'instance pour configurer les valeurs d'instance. En déclarant un constructeur dans la classe Service et en initialisant les champs DinnerRepository et Dinner à l'intérieur, vous pouvez initialiser les champs uniquement lorsque l'instance Service est créée :

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}
Copier après la connexion

Dans ce scénario, les champs sont initialisés lors de l'objet instanciation, garantissant que l'instance de service est entièrement configurée avant d'être utilisée dans l'application.

Une autre option consiste à initialiser paresseusement les champs dans les méthodes et les propriétés. Au lieu d'initialiser les champs dans le constructeur, vous pouvez créer des méthodes ou des propriétés qui récupèrent les valeurs en cas de besoin. Cette approche offre plus de contrôle sur le moment et la manière dont les champs sont remplis de données.

En suivant ces instructions, vous pouvez initialiser efficacement les champs non statiques dans les instances de classe, en évitant l'erreur « Un initialiseur de champ ne peut pas référencer le non-statique. -champ, méthode ou propriété statique."

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal