0

次のシナリオを検討してください。

Class Class1
 Function Func() as String
 End Function
End Class

Class Class2
 Function Func() as String
 End Function

 Function Func2() as String 
 End Function
End Class 

Class Class3

Function GetClassObject as Object
 If (certain condition meets)
   return new Class1();
 Else
  return new Class2();
 End If
End Function

Main()
Object obj1 = GetClassObject();
obj1.Func(); // Error: obj1.Func() is not defined:
End Main

End Class

質問: 何らかの理由で Class1 と Class2 を共通の Interface クラスから継承できないという条件で、obj1.Func() にアクセスするにはどうすればよいですか?

ありがとうございました

更新: この問題に対処するために私が使用し、失敗した 1 つのアプローチは次のとおりです。

    Interface ICommon
     Function Func() as string
    End Interface

    Class Class3
    ...
        Main()

        Dim obj1 as ICommon = TryCast(GetClassObject(), ICommon); //Error: obj1 is "Nothing"
        obj1.Func()

or simply: 

TryCast(GetClassObject(), ICommon).Func() //Error: obj1 is Nothing

        End Main
    ...
    End Class
4

1 に答える 1

0

これを試すことができます

Object obj1 = GetClassObject();

If TypeOf obj1 Is Class1 Then 
   DirectCast(obj1 , Class1).Func()
ElseIf TypeOf obj1 Is Class2 Then 
   DirectCast(obj1 , Class2).Func()
End If

またはあなたも試すことができます

Dim c1 As Class1 = TryCast(obj1, Class1) 
IF Not c1 Is Nothing Then
    c1.Func()
Else
   Dim c2 As Class2 = TryCast(obj1, Class2) 
   IF Not c2 Is Nothing Then
      c2.Func()
   End If
End If

または、With Reflection を試すこともできます。

Dim result as String = obj1.GetType().GetMethod("Func").Invoke(obj1, null)
于 2012-09-19T12:41:49.583 に答える