0

クラスにこのプロパティがあります:

public string A
{
    set
    {
        A = value;
    }
}

A に値を代入しようとするたびにエラーが発生します。実際、私の IIS Express は停止し、手がかりがありません。

これにより、Aへの値の無限の割り当てが作成されると感じています。これは再帰のようなものです。私の質問:

  1. 私のコードで何が起こっていますか?
  2. 実装を指定する場合、プロパティは単なるアクセサー (getter/setter) であり、コンテナーではありませんか?
  3. 自動実装プロパティを使用する場合、そのプロパティはコンテナとアクセサの両方ですか?
4

3 に答える 3

2

プロパティ自体をセッターに割り当てているため、StackOverflow 例外が発生します。これにより、無限の割り当てが発生します。

于 2013-07-31T06:47:39.173 に答える
1

自動実装されたプロパティを使用している場合、コンパイラは値のコンテナーを生成し、そのコンテナーで動作するメソッド (get および set) を生成します。

あなたが行ったように、妥当性を自分で実装すると、コンパイラは set メソッドのみを生成し、それが自分自身を呼び出すため、無限ループが発生します。それを行う正しい方法は次のとおりです。

private string _a;
public string A
{
    set
    {
        _a = value;
    }
}

この場合、コンパイラは の値を設定するメソッドを生成し、_a再帰は発生しません。

于 2013-07-31T06:52:49.980 に答える
1

プロパティ変数自体をコンテナとして設定することはできません。このように記述できます。

シナリオ 1:

public string A
{
    set;
}

シナリオ 2:

private string _A=String.Empty;
public string A
{
    set{_A=value;}
}

質問があれば教えてください。

于 2013-07-31T06:49:57.587 に答える