考虑一个MyForm
类,其中包含Show()
的影子实现。它还包含一个CreateForm()
方法,它接受的形式的一个实例,并调用阴影子:强类型泛型方法调用其参数的基类方法,而不是T中的阴影方法?
Public Class MyForm
Inherits Form
Public Shadows Sub Show()
MessageBox.Show("Shadowed implementation called!")
End Sub
End Class
...
Public Sub CreateForm(ByVal childForm As MyForm)
childForm.MdiParent = Me
childForm.Show()
childForm.Focus()
End Sub
当与CreateForm(New MyForm())
调用的Show()
阴影实现正确调用。现在考虑下面的通用实现:
Public Sub CreateForm(Of T As Form)(ByVal childForm As T)
childForm.MdiParent = Me
childForm.Show()
childForm.Focus()
End Sub
与CreateForm(Of MyForm)(New MyForm())
调用,这个强类型的泛型方法从未调用阴影方法。
这是一个错误,还是我错过了什么?
这是有道理的,但我仍然不知道如何/为什么调用者的上下文没有关系的参数类型。那不就是说像'SomeMethod(Of T)(ByVal arg As T)'这样的泛型定义总是会有一个Object类型的参数吗? – Rob 2010-10-19 20:50:18
@Rob,从'arg'绑定方法的角度来看,是的,它本质上被认为是'Object'。这行在VB.Net中有点模糊,但默认情况下选项strict被禁用,并且非对象方法会发生后期绑定。 – JaredPar 2010-10-19 20:55:49