关于C#中事件与委托区别的一个疑问

发布于 2022-09-11 21:24:40 字数 750 浏览 17 评论 0

网上说C#中的事件是封装过的委托,那么为什么这里是

HandEvent += Method;

而不是

HandEvent handevent += Method;

委托是一种类吧,事件是封装后的类,那为什么没有实例化?静态类感觉也不是。
这里的事件 HandEvent应该是一种属性吧,并且带有访问器remove, add。

  public delegate void InvokeMethond(string str);
    public delegate void Handler(string str);
    class Program
    {
        static event Handler HandEvent;
        static void Main(string[] args)
        {
            InvokeMethond invokeMethond = Method;
            HandEvent += Method;
            invokeMethond("委托");
            HandEvent("事件");
        }
        public static void Method( string str )
        {
            Console.WriteLine(" 字符串: {0}", str);
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2022-09-18 21:24:40

从本质上来说,下面这两句话没区别,都是定义一个 string => void 的委托

public delegate void InvokeMethond(string str);
public delegate void Handler(string str);

从使用上来看,区别就在于:委托要赋初始值,而事件不用

Handler h1;
h1 += s => Console.WriteLine(s);   // ⇐ 这里报错,因为 h1 未赋值(未实例化)

Handler h2 = s => Console.WriteLine(s); // OK

委托是个类型,但事件不同,它是一个成员。

static event Handler h3;

//...
h3 += s => Console.WriteLine($"3 - {s}");   // OK

这说明,在使用 h3 的时候,它已经实例化了,是一个事件对象(成员)。

委托和事件的关系,就像类型和变量之间的关系差不多。上网搜一下“事件与委托的关系”或者类似的关键字,会找到更多有助于理解的信息。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文