Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 具有接口的后期绑定技术 请考虑以下情况: 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(

问题:如果由于某种原因我无法从公共接口类继承Class1和Class2,如何访问obj1.Func()

多谢各位

更新: 我使用的一种解决问题的方法失败了,如下所示:

    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#的奇怪混合永远不会编译。对不起,汉斯,当我们必须用多种语言编程时,就会发生这种情况。我把它留给编译器来提醒我;)约格拉,谢谢你的来信。您的解决方案绝对有效,但由于我必须集中使用它,我希望找到一个优雅的解决方案。然后您可以尝试使用反射。