事件和方法之间的区别

时间:2012-02-03 10:10:17

标签: c# events methods

我对Events感到困惑。 C#事件和方法之间的基本区别是什么?

4 个答案:

答案 0 :(得分:11)

方法只是包含在类中的代码,用于实现一项功能。 C#中的所有代码都包含在方法中。

至于事件,好吧,假设你有一个实现计数器的简单类(让我们称之为Counter对象)。现在假设您希望让其他与Counter无关的对象知道计数何时达到100.你会怎么做?

逻辑方法是允许其他对象指定当计数达到100时要调用的自己的方法之一。然后,每个对象可以单独告诉{{1对象要调用哪个方法。 Counter对象保存此方法列表,当计数达到100时,依次调用每个已保存的方法。

这是事件的工作原理 - Counter类包含一个事件成员(称为Counter),其他对象实例将其自己的方法之一链接到。当CounterIs100对象检测到它已达到100时,它调用 Counter成员,该成员自动调用当前链接到它的所有方法,从而通知每个对象转而计数确实达到了100。 如果没有对象将方法链接到CounterIs100事件成员,则它将是CounterIs100,因此null对象不需要调用事件成员。

Counter

答案 1 :(得分:7)

C#Eventsdelegates的特定形式。如果您使用其他语言(如C ++)编程,则可以将delegate与函数(“方法”)指针进行比较 - 它指向内存中的某些代码。当您将指针作为方法调用时,实际上是在指针所指向的地址处调用该方法。

这对于在调用者和被调用者之间提供解耦是必要的 - 因此当您发布调用它们的代码时,您不必准备好所有方法(这是不可能的 - Forms控件开发人员不能可能知道按下Button时需要调用的代码。您调用指针,其他开发人员稍后将其设置为适当的内存地址。

P.S。然而,delegatesEvents与普通函数指针相比​​还有其他优点 - 您可以确定它将指向一个好看的方法,获取正确的参数数量和类型并返回正确的类型。

答案 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将默认自动创建“添加”和“删除”事件,其行为如上所示。