0

我有一个对象(myObject)类型的对象。myObject 继承了另一个包含函数 (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。也许有一个演员的方式?

4

1 回答 1

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()
于 2012-12-06T00:19:36.027 回答