在过去的几周里,我一直对事件感到困惑。我了解代表的工作方式,而不是详细的工作方式,但足以知道这
delegate datatype
是一个单一的演员代表。
delegate void
是一个多播委托 - 对方法的引用列表。
我知道委托类型编译为一个类,但不幸的是我仍然不确定如何引用该方法。例如
delegate void TestDelegate();
TestDelegate testDelegate = new TestDelegate(myObject.SomeMethod) ;
问题1:我认为myObject 是目标,SomeMethod 是要引用的方法,但我只传递一个输入。那么 myObject.SomeMethod 是否编译为字符串,字符串是否按句点拆分?可笑我知道。
问题 2:当您添加到多播委托时
multicastdelegate+=newmethodtobereference
multicastdelegate() ;
调用列表中的每个方法都被调用或通知?如果这是真的,为什么我需要事件或event
关键字?只是简单的告诉开发者,嘿,这是在充当事件吗?因为我很困惑,我只想在这个阶段继续前进,哈哈。这是我今天写的一个示例代码来测试它是否需要事件关键字。
using System;
namespace LambdasETs
{
public delegate void IsEvenNumberEventHandler(int numberThatIsEven);
public class IsEvenNumberFound
{
public IsEvenNumberEventHandler IsEvenNumberEvent;
private int number;
public void InputNumber(int n)
{
if(number %2 ==0)
{
if (IsEvenNumberEvent != null)
{
IsEvenNumberEvent(n);
}
}
}
public static void Main()
{
IsEvenNumberFound isEvenNumberFound = new IsEvenNumberFound();
isEvenNumberFound.IsEvenNumberEvent += IsEvenNumberAction;
isEvenNumberFound.InputNumber(10);
Console.ReadLine();
}
public static void IsEvenNumberAction(int number)
{
Console.WriteLine("{0} is an even number!", number);
}
}
}
在字段中添加 event 关键字public IsEvenNumberEventHandler IsEvenNumberEvent;
没有区别。请各位大侠解释一下,让菜鸟能看懂,谢谢。