Vb.net 具有接口的后期绑定技术 请考虑以下情况: 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,如何访问obj1.Func() 多谢各位 更新: 我使用的一种解决问题的方法失败了,如下所示:Vb.net 具有接口的后期绑定技术 请考虑以下情况: 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,vb.net,late-binding,Vb.net,Late Binding,问题:如果由于某种原因我无法从公共接口类继承Class1和Class2,如何访问obj1.Func() 多谢各位 更新: 我使用的一种解决问题的方法失败了,如下所示: Interface ICommon Function Func() as string End Interface Class Class3 ... Main() Dim obj1 as ICommon = TryCast(GetClassObject(
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
你可以试试这个
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
或者你也可以尝试反射
Dim result as String = obj1.GetType().GetMethod("Func").Invoke(obj1, null)
后期绑定需要在源代码文件顶部禁用
选项。请尝试编写VB.NET代码,这种VB和C#的奇怪混合永远不会编译。对不起,汉斯,当我们必须用多种语言编程时,就会发生这种情况。我把它留给编译器来提醒我;)约格拉,谢谢你的来信。您的解决方案绝对有效,但由于我必须集中使用它,我希望找到一个优雅的解决方案。然后您可以尝试使用反射。