0

このコードが機能しない理由を誰かが説明できますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        public delegate void Something(string s);

        public class TestDelegate
        {
            public Something something
            {
                set
                {
                    Console.WriteLine("Registering delegate: {0}", something);
                    something = value;
                    Console.WriteLine("Delegate registered: {0}", something);
                }

                get
                {
                   Console.WriteLine("Get delegate");
                   return something;
                }
            }

            public void doSomething(string s)
            {
                something(s);
            }
        }

        static void Main(string[] args)
        {
            TestDelegate td = new TestDelegate();
            td.something = (string s) => Console.WriteLine(s);
            td.doSomething("test");
        }
    }
}
4

1 に答える 1

6

あなたの問題は代理人とは何の関係もありません。あなたの財産は単に無限の再帰のケースです。プロパティは、バッキング フィールドではなく、アクセサーで自身にアクセスします。
次のように変更すると、動作するはずです。

private Something _something;
public Something something
{
    set
    {
        Console.WriteLine("Registering delegate: {0}", value);
        _something = value;
        Console.WriteLine("Delegate registered: {0}", something);
    }

    get
    {
       Console.WriteLine("Get delegate");
       return _something;
    }
}
于 2012-09-20T10:08:10.337 に答える