Maison > développement back-end > C++ > Pourquoi ne puis-je pas initialiser un champ non statique avec une référence à un autre champ non statique en C# ?

Pourquoi ne puis-je pas initialiser un champ non statique avec une référence à un autre champ non statique en C# ?

Susan Sarandon
Libérer: 2024-12-31 13:08:10
original
341 Les gens l'ont consulté

Why Can't I Initialize a Non-Static Field with a Reference to Another Non-Static Field in C#?

Ambiguïté de l'initialiseur de champ : référence de champ non statique dans la classe de service

Souvent, dans le développement de logiciels, nous devons initialiser des champs d'instance dans une classe pour exploiter leurs fonctionnalités. Cependant, tenter d'initialiser un champ d'instance avec une référence à un champ, une méthode ou une propriété non statique dans une autre classe entraînera l'erreur "Un initialiseur de champ ne peut pas référencer le champ, la méthode ou la propriété non statique."

Considérez l'exemple suivant, où nous avons une classe DinnerRepository et une classe Service :

public class DinnerRepository
{
    DinnerDataContext db = new DinnerDataContext();
    public Dinner GetDinner(int id) {...}
}

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

Tenter de compiler ce code générera l'erreur susmentionnée. En effet, l'initialiseur de champ pour le dîner dans la classe Service fait référence à l'instance de dépôt, qui n'est pas statique. Les initialiseurs de champ ont une portée limitée et ne peuvent pas accéder aux membres spécifiques à l'instance.

Une solution courante pour résoudre ce problème consiste à différer l'initialisation jusqu'à ce que le constructeur ait été exécuté. Cependant, cette approche crée des variables locales plutôt que des variables d'instance.

Une solution préférée consiste à initialiser les champs dans un constructeur, où il est autorisé de référencer implicitement cette instance. Cette approche crée des variables d'instance avec le comportement souhaité :

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

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

En comprenant les limites des initialiseurs de champ, les développeurs peuvent éviter cette erreur courante et gérer efficacement les variables d'instance dans leur code.

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!

source:php.cn
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