gpt4 book ai didi

vb.net - 我如何处理在 New 中引发的事件?

转载 作者:行者123 更新时间:2023-12-02 06:41:32 24 4
gpt4 key购买 nike

测试用例:

Public Class T
Public Event A()

Public Sub New()
RaiseEvent A()
End Sub
End Class

Module Module1
Sub Main()
Dim obj = New T()
AddHandler obj.A, AddressOf handleA
End Sub

Sub handleA()
Debug.WriteLine("!")
End Sub
End Module

当然 AddHandlerNew 被触发时还没有运行。

所以我这样尝试:

Public Class T
Public Event A()

Public Sub New()
RaiseEvent A()
End Sub
End Class

Module Module1
Dim WithEvents obj As T

Sub Main()
obj = New T()
End Sub

Sub handleA() Handles obj.A
Debug.WriteLine("!")
End Sub
End Module

但即使在这里,处理程序似乎直到 New 完成后才注册。

然而,在现实生活中,事件是在对象初始化语义部分的代码中引发的,我真的宁愿不必创建一些 Initialize 函数。

我还有其他选择吗?

最佳答案

将引发事件的代码放在构造函数中是没有意义的,除非在同一构造函数中执行的某些其他代码能够注册以处理该事件(例如,通过某些间接方法调用)。这反过来又需要在构造函数完成之前泄漏 Me,这通常是个坏主意。

基本上:尽量避免这种设计。在构造过程中,对象不应对外界可见,这包括事件处理程序。

关于vb.net - 我如何处理在 New 中引发的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com