本文介绍了活动为什么需要委托?为什么我们甚至需要事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直搞不清楚过去几周现在有关事件。我理解代表是如何工作的,它不是如何工作的细节,但不够了解,
委托数据类型是一个单播委托。
委托无效是一个多播委托 - 方法的引用清单



我知道一个委托类型编译成一个类,可惜我现在还不能确定如何使用该方法被引用。例如:



 委托无效TestDelegate(); 
TestDelegate testDelegate =新TestDelegate(myObject.SomeMethod);



问题1:我觉得myObject的是目标,并且的someMethod是引用的方法,但我米只传一个输入。
等是myObject.SomeMethod编译为一个字符串,是期间分割字符串?可笑的,我知道。
当你加入一个多播委托

 <$ C:



问题2 $ C> multicastdelegate + = newmethodtobereference
multicastdelegate();

在调用列表中的每个方法被调用或通知?
。如果这是真的,为什么在地狱我需要的事件或事件关键字?难道仅仅是为了告诉嘿,这是作为一个事件的开发商?因为我认真困惑,我只是想在此阶段动议的笑。这是一个示例代码,我写今天要测试它是否我需要事件的关键字或不

 使用系统; 
命名空间LambdasETs
{
公众委托无效IsEvenNumberEventHandler(INT numberThatIsEven);

公共类IsEvenNumberFound
{
公共IsEvenNumberEventHandler IsEvenNumberEvent;
私人诠释数目;

公共无效InputNumber(INT N)
{
如果(编号%2 == 0)
{
如果(IsEvenNumberEvent!= NULL)
{
IsEvenNumberEvent(N);
}
}
}


公共静态无效的主要()
{
IsEvenNumberFound isEvenNumberFound =新IsEvenNumberFound();

isEvenNumberFound.IsEvenNumberEvent + = IsEvenNumberAction;

isEvenNumberFound.InputNumber(10);

到Console.ReadLine();

}

公共静态无效IsEvenNumberAction(INT数)
{
Console.WriteLine({0}为偶数!,数);
}
}


}

添加事件关键字字段公共IsEvenNumberEventHandler IsEvenNumberEvent; 有没有什么区别。
可以请一些解释,这样一个小白能理解表示感谢。


解决方案

Not true. All "normal" delegates are multicast, even if they have a non void return type.

No, myObject.SomeMethod is a method group. This way of delegate instance creation involves a bit of compiler magic.

If multicastdelegate is a normal delegate variable, this is equivalent to multicastdelegate = multicastdelegate + newmethodtobereference i.e. it creates a new delegate that calls several methods, and assigns it to multicastdelegate.


Now to your main question: What's the purpose of events?

Events have delegate types. They behave similarly to properties. Their purpose is encapsulation, in particular they only allow consumers to subscribe(+=) and unsubscribe(-=) but not to read the value of the event.

Properties are a combination of two methods: get and set.

Events are a combination of two public methods subscribe and unsubscribe, and in the case of a field-like event also something similar to a private getter.

这篇关于活动为什么需要委托?为什么我们甚至需要事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 04:04