6
class Program
{
    static void Main(string[] args)
    {
        something s = new something();
        s.DoIt(10);
        Console.Write(s.testCount);
    }
}

class something
{
    public int testCount
    {
        get { return testCount; }
        set { testCount = value + 13; }
    }

    public void DoIt(int val)
    {
        testCount = val;
    }
}

C#のゲッター/セッターをテストして遊んでみたかったので、私が持っているものです。ただし、「set {testCount = value + 13}」で StackOverFlowException が処理されませんでした。また、Visual Studio から「デバッガーはプロセスの実行を続行できません。プロセスが終了しました」というメッセージが表示されるため、ステップスルーできません。私が間違っていることはありますか?

編集: 今日、私はかなりばかげた derp を行ったことを知りました。多数の即時応答を考えると。今、私はよく知っています。

4

5 に答える 5

18

プロパティ内のプロパティを参照しているため、無限再帰があります。

これにはバッキング フィールドを使用する必要があります。

private int testCount;
public int TestCount
{
    get { return testCount; }
    set { testCount = value + 13; }
}

フィールド名(小文字) ではなく、プロパティ名TestCount(C# 命名標準にも準拠) に注意してください。testCountt

于 2013-05-22T14:14:42.723 に答える
5

プロパティをバックアップする変数を宣言する必要があります。

class something
{
    private int _testCount;
    public int testCount
    {
        get { return _testCount; }
        set { _testCount = value + 13; }
    }
    ...
于 2013-05-22T14:14:49.823 に答える