Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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 VB中的后期绑定_Vb.net_Late Binding - Fatal编程技术网

Vb.net VB中的后期绑定

Vb.net VB中的后期绑定,vb.net,late-binding,Vb.net,Late Binding,从我到目前为止所读的内容来看,后期绑定是将变量定义为对象,然后稍后将其分配给实际对象,这实际上是在运行时完成的。我不明白那是什么意思。也许这就是我心中的Java,但这不就是将功能局限于对象中的东西吗?这就像说,“我想要额外的东西的潜力,但我不想访问它。”我忽略了VB或Java中后期绑定的实际用途吗?你有相反的想法。通过使用早期绑定,您将自己限制为变量类型的成员。如果选项严格限制在上,则声明为类型对象的变量将只允许您访问类型对象的成员,而不管它实际引用的对象的类型如何。使用选项Strict Off

从我到目前为止所读的内容来看,后期绑定是将变量定义为对象,然后稍后将其分配给实际对象,这实际上是在运行时完成的。我不明白那是什么意思。也许这就是我心中的Java,但这不就是将功能局限于对象中的东西吗?这就像说,“我想要额外的东西的潜力,但我不想访问它。”我忽略了VB或Java中后期绑定的实际用途吗?

你有相反的想法。通过使用早期绑定,您将自己限制为变量类型的成员。如果
选项严格限制在
上,则声明为类型
对象
的变量将只允许您访问类型
对象
的成员,而不管它实际引用的对象的类型如何。使用
选项Strict Off
,您可以访问类型为
Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行

后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为type
Object
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行


顺便说一句,后期绑定不需要使用type
Object
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型
控件
,然后使用特定于类型
按钮的成员

您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果
选项严格限制在
上,则声明为类型
对象
的变量将只允许您访问类型
对象
的成员,而不管它实际引用的对象的类型如何。使用
选项Strict Off
,您可以访问类型为
Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行

后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为type
Object
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行


顺便说一句,后期绑定不需要使用type
Object
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型
控件
,然后使用特定于类型
按钮的成员

您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果
选项严格限制在
上,则声明为类型
对象
的变量将只允许您访问类型
对象
的成员,而不管它实际引用的对象的类型如何。使用
选项Strict Off
,您可以访问类型为
Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行

后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为type
Object
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行


顺便说一句,后期绑定不需要使用type
Object
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型
控件
,然后使用特定于类型
按钮的成员

您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果
选项严格限制在
上,则声明为类型
对象
的变量将只允许您访问类型
对象
的成员,而不管它实际引用的对象的类型如何。使用
选项Strict Off
,您可以访问类型为
Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行

可能是最常见的
Public Class Handler1
   Public Sub Execute()
       ' do something
   End Sub
End Class

Public Class Handler2
   Public Sub Execute()
       ' do something else
   End Sub
End Class
If someting = 1 Then 
    Session("Handler") = New Handler1()
Else
    Session("Handler") = New Handler2()
End If
Session("Handler").Execute()
Dim h As IHandler = TryCast(Session("Handler"), IHandler)
If h IsNot Nothing Then
    h.Execute()
End If