フィールド初期化子の曖昧さ: サービス クラスの非静的フィールド参照
ソフトウェア開発では、クラス内のインスタンス フィールドを初期化する必要があることがよくあります。それらの機能を活用します。ただし、別のクラスの非静的フィールド、メソッド、またはプロパティへの参照を使用してインスタンス フィールドを初期化しようとすると、「フィールド初期化子は非静的フィールド、メソッド、またはプロパティを参照できません。」というエラーが発生します。
DinnerRepository クラスと 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); }
このコードをコンパイルしようとすると、前述のエラーがスローされます。これは、Service クラスのディナーのフィールド初期化子が非静的であるリポジトリ インスタンスを参照するためです。フィールド初期化子はスコープが制限されており、インスタンス固有のメンバーにアクセスできません。
この問題を解決する一般的な解決策の 1 つは、コンストラクターが実行されるまで初期化を延期することです。ただし、このアプローチでは、インスタンス変数ではなくローカル変数が作成されます。
推奨される解決策は、コンストラクターでフィールドを初期化し、このインスタンスを暗黙的に参照できるようにすることです。このアプローチにより、目的の動作を持つインスタンス変数が作成されます。
public class Service { private DinnerRepository repo; private Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
フィールド初期化子の制限を理解することで、開発者はこの一般的なエラーを回避し、コード内のインスタンス変数を効果的に管理できます。
以上がC# で別の非静的フィールドへの参照を使用して非静的フィールドを初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。