Maison >développement back-end >C++ >Pourquoi ne puis-je pas référencer des membres non statiques dans les initialiseurs de champs C# ?

Pourquoi ne puis-je pas référencer des membres non statiques dans les initialiseurs de champs C# ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 08:31:081006parcourir

Why Can't I Reference Non-Static Members in C# Field Initializers?

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 :

    • Dans cette approche, le champ les valeurs sont initialisées dans le constructeur de la classe :
public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}
  • Utilisation de variables locales :

    • Cette option implique de déclarer des variables locales dans le champ initialiseurs :
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!

Déclaration:
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