【问题标题】:Why properties of delegate type don't work? [closed]为什么委托类型的属性不起作用? [关闭]
【发布时间】:2012-09-20 10:03:53
【问题描述】:

谁能解释为什么这段代码不起作用?

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");
        }
    }
}

【问题讨论】:

  • “不起作用”不是很有帮助。发生什么了?你能指望什么?控制台打印了什么?

标签: c# .net properties delegates


【解决方案1】:

您的问题与代表无关。您的财产只是一个无限递归的例子。该属性在访问器中访问自身而不是支持字段。
像这样更改它,它应该可以工作:

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;
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多