我对Events
感到困惑。 C#事件和方法之间的基本区别是什么?
答案 0 :(得分:11)
方法只是包含在类中的代码,用于实现一项功能。 C#中的所有代码都包含在方法中。
至于事件,好吧,假设你有一个实现计数器的简单类(让我们称之为Counter
对象)。现在假设您希望让其他与Counter
无关的对象知道计数何时达到100.你会怎么做?
逻辑方法是允许其他对象指定当计数达到100时要调用的自己的方法之一。然后,每个对象可以单独告诉{{1对象要调用哪个方法。 Counter
对象保存此方法列表,当计数达到100时,依次调用每个已保存的方法。
这是事件的工作原理 - Counter
类包含一个事件成员(称为Counter
),其他对象实例将其自己的方法之一链接到。当CounterIs100
对象检测到它已达到100时,它调用 Counter
成员,该成员自动调用当前链接到它的所有方法,从而通知每个对象转而计数确实达到了100。
如果没有对象将方法链接到CounterIs100事件成员,则它将是CounterIs100
,因此null
对象不需要调用事件成员。
Counter
答案 1 :(得分:7)
C#Events
是delegates
的特定形式。如果您使用其他语言(如C ++)编程,则可以将delegate
与函数(“方法”)指针进行比较 - 它指向内存中的某些代码。当您将指针作为方法调用时,实际上是在指针所指向的地址处调用该方法。
这对于在调用者和被调用者之间提供解耦是必要的 - 因此当您发布调用它们的代码时,您不必准备好所有方法(这是不可能的 - Forms控件开发人员不能可能知道按下Button
时需要调用的代码。您调用指针,其他开发人员稍后将其设置为适当的内存地址。
P.S。然而,delegates
和Events
与普通函数指针相比还有其他优点 - 您可以确定它将指向一个好看的方法,获取正确的参数数量和类型并返回正确的类型。
答案 2 :(得分:5)
C#中的事件是一种类,当某个对象发生一些有趣的事情时,该类可以向该类的客户端提供通知。
http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx
方法是包含一系列语句的代码块。在C#中,每个执行的指令都是在方法的上下文中完成的。
http://msdn.microsoft.com/en-us/library/ms173114%28v=vs.80%29.aspx
答案 3 :(得分:0)
.net中的事件是一对方法,一个用于“添加”,一个用于“删除”,每个方法都接受一个委托。通常,“Add”方法将获取传入的委托并将其添加到委托列表或MulticastDelegate;将委托传递给之前传递给“Add”方法的“Remove”事件应该从列表中删除该委托。如果没有其他要求,C#和vb.net将默认自动创建“添加”和“删除”事件,其行为如上所示。