フィールド初期化子は非静的メンバーを参照できない: 詳細な説明
フィールド初期化子を使用してクラスのフィールドを初期化しようとした場合、特定の制限を遵守することが重要です。質問が指摘しているように、フィールド初期化子内で非静的メンバーを参照するとエラーが発生します。
提供されたコードは、Service クラス内でこの問題を示しています。
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
エラーが発生する理由は、フィールドイニシャライザは、クラスの非静的メンバーを参照することを許可されていません。これには、インスタンス変数、メソッド、プロパティが含まれます。
代替ソリューション:
回答で提案されている代替ソリューションには次のものがあります:
コンストラクターの使用初期化:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
ローカルの使用変数:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
ただし、次の点に注意することが重要です。後者のアプローチでは、インスタンスではなくローカル変数のみが作成されます。 variables.
フィールド初期化子の制限:
C# 4 仕様 (セクション 10.5.5.2) によれば、フィールド初期化子は作成中のインスタンスを参照できません。したがって、フィールド初期化子内の単純な名前を介してインスタンス メンバーを直接参照することは禁止されています。
概要:
「フィールド初期化子は非静的フィールドを参照できません」を回避するには、メソッド、またはプロパティ」エラーが発生した場合は、フィールド初期化子の制限を理解し、コンストラクターの初期化やローカル変数の使用などの適切な代替アプローチを採用することが重要です。これらの代替方法により、クラスのインスタンス メンバーを適切に初期化できます。
以上がC# フィールド初期化子で非静的メンバーを参照できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。