ホームページ >バックエンド開発 >C++ >別の非静的フィールドを使用してクラス フィールドを初期化できないのはなぜですか?

別の非静的フィールドを使用してクラス フィールドを初期化できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-01 10:48:10382ブラウズ

Why Can't I Initialize a Class Field Using Another Non-Static Field?

クラス インスタンスのフィールド初期化子について

クラスを設計するときは、フィールド、特に非静的フィールドを適切な値で初期化することが重要です。このエラー メッセージ「フィールド初期化子は非静的フィールド、メソッド、またはプロパティを参照できません」は、非静的クラス メンバーに直接アクセスしてクラス内のインスタンス変数を初期化しようとすると表示されます。

In特定のケースでは、Service クラスには、DinnerRepository クラスのインスタンスで初期化されたフィールドと、取得された Dinner オブジェクトの後続の割り当てが含まれています。ただし、このアプローチでは前述のエラーが発生します。

フィールド初期化の代替解決策

フィールド初期化の代替手段の 1 つは、インスタンス コンストラクターを使用してインスタンス値を設定することです。 Service クラスでコンストラクターを宣言し、その中で DinnerRepository フィールドと Dinner フィールドを初期化すると、Service インスタンスの作成時にのみフィールドを初期化できます。

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

このシナリオでは、フィールドはオブジェクトの作成中に初期化されます。インスタンス化により、アプリケーションで使用される前に Service インスタンスが完全にセットアップされていることを確認します。

もう 1 つのオプションは、メソッドとプロパティ内のフィールドを遅延初期化することです。コンストラクターでフィールドを初期化する代わりに、必要に応じて値を取得するメソッドまたはプロパティを作成できます。このアプローチにより、フィールドにデータをいつどのように設定するかをより詳細に制御できるようになります。

これらのガイドラインに従うことで、クラス インスタンス内で非静的フィールドを効果的に初期化し、「フィールド初期化子は非静的フィールドを参照できません」というエラーを回避できます。 -静的フィールド、メソッド、またはプロパティ。"

以上が別の非静的フィールドを使用してクラス フィールドを初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。