最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中event关键字的使用

CSharp 宇托 191浏览 暂无评论

在C#中,event关键字应该算是一个语法糖的关键字吧。也就是说,不用event关键字也能实现一样的功能,但使用event关键字之后,代码量和可读性要提高很多。

在使用event关键字的地方,用delegate委托的方法也同样能实现,但在公开性的设置方法也需要一些代码。基本上来说,event关键字和delegate委托方法实现的主要区别就在于公开性。

要注意的是用event关键字申明的字段只能内部访问。外部只能用+=-=来添加和删除事件处理函数。另外event关键字只能用于字段,不能用于属性(也就是不能有getset)。

还有一个在编程时要注意的是,用event关键字申明或者delegate委托方法实现的字段在没有事件时(没有添加事件,或添加事件后又删除了),其值为null,要注意在执行前进行null判断。

示例代码:

C#
using System;

namespace Test
{
    public delegate void ActionFunc(string value);

    class EventTest
    {
        public event ActionFunc EventVal;
        public ActionFunc CommonVal;

        public void ExeEventVal(string value)
        {
            if (EventVal != null)
                EventVal(value);
        }

        public void ExeCommonVal(string value)
        {
            if (CommonVal != null)
                CommonVal(value);
        }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            var eventTest = new EventTest();
            eventTest.EventVal += (s) => Console.WriteLine("EventVal:" + s);
            eventTest.EventVal += (s) => Console.WriteLine("EventVal2:" + s);

            eventTest.CommonVal += (s) => Console.WriteLine("CommonVal:" + s);
            eventTest.CommonVal += (s) => Console.WriteLine("CommonVal2:" + s);

            eventTest.ExeEventVal("ExeEventVal");
            eventTest.ExeCommonVal("ExeCommonVal");
            // eventTest.EventVal("EventVal"); //这句编译出错
            eventTest.CommonVal("CommonVal");
        }
    }
}

转载请注明:宇托的狗窝 » C#中event关键字的使用

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址