5

getおよびset関数を上書きしようとすると、StackOverflowExceptionの原因がわかりません。デフォルトのgetとsetを使用すると、機能します。

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

しかし、データを追加しようとすると、StackOverflowExceptionがスローされます。

public MyEnumType data
{
  get
  {
    return data;
  }
  set
  {
    data = value;
  }
}

何か案は?ASP.NETユーザーコントロール属性に対してこれを行う場合、問題はありません。通常の列挙型データ型でStackOverflowExceptionが発生するのはなぜですか?

4

4 に答える 4

30

はい、バッキングフィールドがありません...これはあなたがそれを行うべき方法です:

private MyEnumType data;

public MyEnumType Data
{
  get
  {
    return data;
  }
  set
  {
    data = value;
  }
}

何が起こるかというと、それ自体を返すためにプロパティを参照しているため、それ自体の値にアクセスしようとする無限ループが発生します。したがって、スタックオーバーフロー。

あなたの場合、get メソッドと set メソッドに追加のロジックを追加しない場合は、自動プロパティも使用できます。これは次のように単純に定義されます。

public MyEnumType Data
{
  get;
  set;
}
于 2009-09-17T09:57:15.290 に答える
8

getter と setter 内でプロパティ自体を参照しているため、無限再帰 (スタック オーバーフロー) が発生します。標準の命名規則 ( Data )を使用していれば、より明白でした。次のようなものを試してください:

private MyEnumType _data;

public MyEnumType Data
{
  get { return _data; }
  set { _data = value; }
}
于 2009-09-17T09:56:42.933 に答える
3
public class MyClass
{
    string propertyString;

    public string MyPropertyString
    {
        get
        {
            return propertyString;
        }
        set
        {
            propertyString = value;
        }
    }
}

プロパティの名前は、メンバー名とは異なる必要があります。

于 2009-09-17T09:59:06.627 に答える
1

セッター/ゲッター内にブレークポイントを配置してデバッグし、ステップオーバーではなくステップイン ( ) を使用するようF11ます。これは何が起こっているのかを説明するのに役立ちます。

于 2009-09-17T10:38:39.057 に答える