2010-03-09 3 views
3

Ошибка:Общие WithEvents

'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 для обработки событий, определенных в структуре.

EDIT

b. использование Private WithEvents _Tad AsIVisibleChanged (M.A. Hanin)

c. ?

ответ

3

Я подозреваю, что это связано с тем, что WithEvents не поддерживает типы значений. Когда вы только ограничиваете, чтобы T был IVisibleChanged, вы не гарантируете ссылочный тип, поэтому WithEvents нельзя использовать. Я не знаю синтаксис VB, но если это что-то вроде C#, вероятно, можно сделать следующее:

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

Это гарантирует, что T не только реализует IVisibleChanged пути и то, что он не будет структурой.

+0

Синтаксис в порядке, спасибо! – serhio