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