- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请看下面的代码,它按我的预期工作:
Partial Class _Default
Inherits System.Web.UI.Page
Delegate Sub TestEventHandler(ByVal o As Object, ByVal e As EventArgs)
Dim alhandler As TestEventHandler = AddressOf TestEventMethod
Public Event Test1 As TestEventHandler
Public Event Test2 As TestEventHandler
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler Me.Test1, alhandler
AddHandler Me.Test2, alhandler
RaiseEvent Test1(Me, e)
RaiseEvent Test2(Me, e)
RemoveHandler Me.Test1, alhandler
RaiseEvent Test1(Me, e)
End Sub
Public Sub TestEventMethod(ByVal o As Object, ByVal e As EventArgs)
MsgBox("Test")
End Sub
End Class
Dim alhandler As TestEventHandler = AddressOf TestEventMethod '1
Public Event Test1 As TestEventHandler '2
1) This is saying that the reference of alHandler is a delegate that points to the address of a function. 2) This is saying that Test1 is an event of type Delegate. How can an event and a handler be a delegate?
最佳答案
正如其他人所说,每种类型的委托(delegate)都是一种类型,就像它是一个常规类一样。因此,在您的示例代码中,TestEventHandler
是委托(delegate)类型。一个 TestEventHandler
变量可以引用任何 TestEventHandler
对象,就像任何其他变量可以引用它自己类型的任何对象一样。 TestEventHandler
对象必须被实例化,就像任何其他类型的对象一样。
然而,委托(delegate)是特殊的,因为您使用不同的特殊语法来声明它们。例如,如果您有以下方法:
Public Sub MyMethod(Text As String)
' ...
End Sub
Public Delegate Sub MyMethodDelegate(Text As String)
MyMethodDelegate
类型。这不会声明该类型的变量,也不会实例化该类型的对象。
Public Event MyEvent As MyMethodDelegate
Public Event MyEvent(Text As String)
MyMethodDelegate
,这会起作用,但标准规定事件应该有一个发送者和一个事件参数。)当一个事件被声明时,把它想象成一个变量。在幕后,它真的很像一个集合对象,它保存了使用
AddHandler
添加到其中的所有委托(delegate)对象的列表。功能。
AddressOf
时,编译器会自动为您实例化一个新的委托(delegate)对象。功能。因此,例如,当您执行以下操作时:
AddHandler myObject.MyEvent, AddressOf MyMethod
AddHandler myObject.MyEvent, New MyMethodDelegate(AddressOf MyMethod)
Dim alhandler As TestEventHandler = AddressOf TestEventMethod
Dim alhandler As TestEventHandler = New TestEventHandler(AddressOf TestEventMethod)
AddHandler
和
EventHandler
函数和事件不能从定义它的类的外部引发/调用。
关于vb.net - EventHandler与Delegate的误区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073327/
我最近在做一个基于 TensorFlow 的 Udacity 深度学习类(class)。 .我有一个简单的 MNIST大约 92% 准确的程序: from tensorflow.examples.tu
意识不到误区的存在最为离谱; 01 生活中,职场上,游戏里,都少不了正面对喷过:意识太差; 在个人的认知中意识即思维,意识太差即思维中存在的误区比较多;
我是一名优秀的程序员,十分优秀!