考慮一個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