Maison >développement back-end >C++ >Pourquoi ne puis-je pas référencer des membres non statiques dans les initialiseurs de champs C# ?
Un initialiseur de champ ne peut pas référencer un membre non statique : une explication détaillée
Lors de la tentative d'initialisation des champs d'une classe à l'aide d'initialiseurs de champ , il est important de respecter certaines restrictions. Comme le souligne la question, le référencement de membres non statiques dans les initialiseurs de champ entraîne une erreur.
Le code fourni illustre ce problème au sein de la classe Service :
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
L'erreur se produit car le champ les initialiseurs ne sont pas autorisés à référencer des membres non statiques de la classe. Cela inclut les variables d'instance, les méthodes et les propriétés.
Solutions alternatives :
Les solutions alternatives proposées dans la réponse incluent :
Utilisation de l'initialisation du constructeur :
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
Utilisation de variables locales :
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
Cependant, il est important de noter que cette dernière approche crée uniquement des variables locales plutôt que des variables d'instance.
Restrictions sur Initialiseurs de champs :
Selon la spécification C# 4 (section 10.5.5.2), les initialiseurs de champ ne peuvent pas faire référence à l'instance en cours de création. Par conséquent, il est interdit de référencer directement les membres de l'instance via un simple nom dans les initialiseurs de champ.
Résumé :
Pour éviter le message "Un initialiseur de champ ne peut pas référencer le champ non statique , méthode ou propriété", il est essentiel de comprendre les limites des initialiseurs de champ et d'employer des approches alternatives appropriées telles que l'initialisation du constructeur ou l'utilisation de variables locales. Ces alternatives permettent l'initialisation correcte des membres de l'instance de la classe.
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!