我有一个对象(myObject)类型Object。 myObject继承了另一个包含fonction(ImyFunction)的类。我想调用该函数,但我的项目需要在“Option Strict On”中。所以它要求声明对象。
Public MustInherit Class IClass(Of T1)
...
Public Sub IMyFunction()
...
Public Class myClass1 : Inherits IClass(Of Item1)
...
Public Class myClass2 : Inherits IClass(Of Item2)
dim obj as object = new myClass1
...
obj.IMyFunction 'at this moment, I dont know whish class base of IClass I have
(它只是一个样本)
由于严格的选项,我无法做obj.IMyFunction。 也许有一种演员的方式?
答案 0 :(得分:1)
MustInherit
关键字并不意味着您不能将其用作变量类型,它只是意味着您无法实例化它。例如:
Dim obj As IClass(Of Item1) = New myClass1() ' This works
Dim obj2 As IClass(Of Item1) = New IClass(Of Item1)() ' This will not compile
但是,因为它是通用的,你必须指定T1
的类型,所以没有办法做我认为你真正想做的事情:
Dim obj As IClass = New myClass1() ' Can't do this
obj.iMyFunction()
在这种情况下,我建议使用非泛型基类或接口,如下所示:
Public Interface IInterface
Sub IMyFunction()
End Interface
Public MustInherit Class IClass(Of T1)
Implements IInterface
End Class
然后,你可以这样做:
Dim obj As IInterface = New myClass1()
obj.IMyFunction()