问题描述
我一直搞不清楚过去几周现在有关事件。我理解代表是如何工作的,它不是如何工作的细节,但不够了解,
委托数据类型
是一个单播委托。
委托无效
是一个多播委托 - 方法的引用清单
我知道一个委托类型编译成一个类,可惜我现在还不能确定如何使用该方法被引用。例如:
委托无效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.
这篇关于活动为什么需要委托?为什么我们甚至需要事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!