Maison > développement back-end > C++ > Pourquoi mon initialiseur de champ ne peut-il pas accéder aux membres non statiques ?

Pourquoi mon initialiseur de champ ne peut-il pas accéder aux membres non statiques ?

DDD
Libérer: 2025-01-03 03:17:48
original
489 Les gens l'ont consulté

Why Can't My Field Initializer Access Non-Static Members?

Instances vs statiques : démystifier une erreur d'initialisation courante

Dans le développement de logiciels, les classes contiennent souvent à la fois des instances et des membres statiques. Les membres d'instance sont associés à des instances individuelles d'une classe, tandis que les membres statiques sont partagés entre toutes les instances.

Lorsque vous travaillez avec des membres d'instance, il est important de comprendre les limites des initialiseurs de champ. Les initialiseurs de champ sont utilisés pour attribuer des valeurs aux champs d'instance lorsqu'une instance est créée. Cependant, comme indiqué dans le message d'erreur « Un initialiseur de champ ne peut pas référencer le champ, la méthode ou la propriété non statique », les initialiseurs de champ ne peuvent pas référencer les membres non statiques.

Analyse du code d'origine

Le code que vous avez fourni démontre cette limitation. La classe Service contient un dépôt de champ d'instance et un initialiseur de champ qui tente d'appeler une méthode non statique GetDinner sur le dépôt d'instance. Cela génère une erreur car l'initialiseur de champ tente d'accéder à un membre non statique avant que l'instance ne soit complètement initialisée.

Solutions

Il existe deux solutions courantes pour ce numéro :

  1. Initialisation du constructeur : Dans le constructeur de la classe Service, vous pouvez initialisez le champ repo et appelez la méthode GetDinner. Cela garantit que l'instance a été entièrement initialisée avant d'accéder à ses membres non statiques.
  2. Variables locales : au lieu d'utiliser des initialiseurs de champ, vous pouvez déclarer des variables locales dans les méthodes de la classe Service. . Cela vous permet d'accéder aux membres non statiques sans rencontrer l'erreur.

Bonne pratique

Les deux solutions sont valides, mais l'initialisation du constructeur est généralement considérée comme la préférée. approche. En effet, il offre plus de flexibilité et vous permet d'initialiser d'autres champs d'instance selon vos besoins.

En évitant l'utilisation d'initialiseurs de champ pour les membres non statiques, vous pouvez éviter les erreurs d'initialisation et garantir que votre code se comporte comme prévu. .

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal