0

object(myObject)型のObjectを取得しました。myObjectは、関数(ImyFunction)を含む別のクラスを継承します。関数を呼び出したいのですが、プロジェクトが「OptionStrictOn」になっている必要があります。したがって、オブジェクトの宣言を要求します。

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

(それは単なるサンプルです)

strictオプションのため、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 に答える