据我所知,事件是一种类允许客户端为代理提供事件发生时应该调用的方法的方法。当事件发生时,将调用由其客户端提供给它的代理。
但如上面的代码所示,所述功能也可以通过委托来实现,即不使用委托。
class Program
{
static void Main(string[] args)
{
ListWithChangedEvent lwce = new ListWithChangedEvent();
lwce.delegateVariable = DelegateTestMethod;
lwce.Add("test");
Console.ReadLine();
}
public static void DelegateTestMethod(object sender, object e)
{
}
}
public delegate void ChangedEventHandler(object sender, object e);
public class ListWithChangedEvent : System.Collections.ArrayList
{
public override int Add(object value)
{
int result = base.Add(value);
if (delegateVariable != null)
delegateVariable(this, "");
return result;
}
public ChangedEventHandler delegateVariable;
}
所以,我想知道事件提供了哪些附加功能?
答案 0 :(得分:5)
所以,我想知道事件提供了哪些附加功能?
事件提供了两个明显不同于公开代表的优势:
答案 1 :(得分:0)
您的示例允许调用单个委托。 event
是代表的集合,这意味着您可以+=
和-=
离开您的心脏(即使在事件调用期间)。
答案 2 :(得分:0)
事件只是处理程序的access approach
。
它不允许你做myHandler=myFunc;
仅使用+=
(来自外部类)
如果另一个哑巴使用你的代码 - 那么他就不会使用=
破坏你的链,所以你只允许他+=
或-=