C#多播委托和事件有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#多播委托和事件有啥区别相关的知识,希望对你有一定的参考价值。

感觉功能上一模一样啊。

参考技术A 事件是对委托的封装。

如果一个类里,你把一个委托声明为 public 了,那么外部就可以随意改变委托变量的值,包括清空委托变量等,这样的话就违背了面向对象思想的封装特性;但如果声明为 private ,那就失去了委托的意义(在外部不能给委托添加函数引用)。此时就需要事件了。

可以把事件看成是委托的实例,事件是对委托的封装,就像类的属性成员一样,事件封装了委托,这样,就可以把委托定义为 private 类型,在外部就可以通过与委托对应的事件来访问委托了,而事件受到限制符“+=”“-=”的影响,不会破坏封装的特性。追问

可是,事件是一个方法,委托才是一个类,所以怎么封装呢?
不好意思,有点模糊,请给代码

追答

事件是一个方法,委托是一个类?题主这是看哪本书上这么说的?

事件的本质就是委托。委托类型用 delegate 修饰,事件类型用 event 修饰。

本回答被提问者和网友采纳

C#进阶多播委托和委托数组像是一回事~

这个MathOperation类有三静态方法,参数都是double,并且没有返回值,考虑用Action<>() 这种预定义的委托哦

    class MathOperations
    {
        public static void MultiplyByTwo(double value)
        {
            Console.WriteLine( "2* {0} = {1}",value,value * 2);
        }
        public static void Square(double value)
        {
            Console.WriteLine("{0}* {1} = {2}", value, value, value*value );

        }
        public static void Introduction(double value)
        {
            Console.WriteLine("I‘m a double. My value is {0}", value);

        }
    }

书上提到了委托数组,我们来定义一个。里面放三个方法。

            Action<double>[] delegateList =
            {
                MathOperations.MultiplyByTwo,
                MathOperations.Square,
                MathOperations.Introduction
            };

我这样调用这个委托。

            foreach(var del in delegateList)
            {
                del(5);
            }

输出:

5* 5 = 25
2* 5 = 10
I‘m a double. My value is 5

 

再以多播委托 +号来试下

            Action<double> operations = MathOperations.MultiplyByTwo;
            operations += MathOperations.Square;
            operations += MathOperations.Introduction;
            operations(5);

结果是相同的。

不过书上提到这个方法不错

 

        public static void ProcessAndDisplayNumber(Action<double> operations, double value)
        {
            operations(value);
        }

举个栗子,打人,亲人,骂人,掐人,这4个动作都需要一个人作为你动作的对象。 我是一个action委托<in 人>,你可以让我打人,骂人,骂人*2,一下子执行好多个动作,包括重复的动作。这就是我的理解,目前是。

以上是关于C#多播委托和事件有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

unity的C#学习——委托事件和匿名方法

C#委托与事件

C#委托与事件

按自己的想法去理解事件和泛型(C#)

C#进阶多播委托和委托数组像是一回事~

Unity游戏开发C#基础委托与事件