.net - 通用事件

标签 .net vb.net

错误:

'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints

背景:

Public Class Tadpole(Of T As IVisibleChanged, P As IVisibleChanged)
  Private WithEvents _Tad As T ' ERROR '
  Private WithEvents _Pole As P ' ERROR '

  Public Property Tad() As T ...

  Public Property Pole() As P ...

End Class

''' IVisibleChanged '''
Public Interface IVisibleChanged
  Property Visible() As Boolean
  Event VisibleChanged As EventHandler
End Interface

解决方法:

一个。使用 AddHandler 处理结构中定义的事件。

编辑

使用 Private WithEvents _Tad AsIVisibleChanged (M.A. Hanin)

最佳答案

我怀疑这是因为 WithEvents 不支持值类型。当您仅将 T 约束为 IVisibleChanged 时,您不能保证引用类型,因此无法使用 WithEvents。我不知道 VB 语法,但如果它类似于 C#,你可能会这样做:

' Not sure of the VB syntax.
(Of T As {IVisibleChanged, Class})

这保证了 T 不仅会实现 IVisibleChanged,而且它不会是一个结构。

关于.net - 通用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2408675/

相关文章:

c# - 分配引用类型时 c# 中的奇怪 stackoverflow

mysql - VB.net 更新查询没有给出错误,也没有更新我的 sql 数据库

.net - 线程正在休眠时,VB .Net服务不会停止

c++ - 解密导致 Rijndael 和 256 block 大小的乱码

.net - 分段文件流写入

.net - 重新指定已经继承的接口(interface)有什么意义吗?

c# - .NET AppDomains 可以做到这一点吗?

asp.net - GridView 中具有列跨度的标题列

vb.net - 使用VB计算报表中的行数

c# - 使用相同的 HttpWebRequest obj 请求第二个 url