Vb.net VB中的后期绑定
从我到目前为止所读的内容来看,后期绑定是将变量定义为对象,然后稍后将其分配给实际对象,这实际上是在运行时完成的。我不明白那是什么意思。也许这就是我心中的Java,但这不就是将功能局限于对象中的东西吗?这就像说,“我想要额外的东西的潜力,但我不想访问它。”我忽略了VB或Java中后期绑定的实际用途吗?你有相反的想法。通过使用早期绑定,您将自己限制为变量类型的成员。如果Vb.net VB中的后期绑定,vb.net,late-binding,Vb.net,Late Binding,从我到目前为止所读的内容来看,后期绑定是将变量定义为对象,然后稍后将其分配给实际对象,这实际上是在运行时完成的。我不明白那是什么意思。也许这就是我心中的Java,但这不就是将功能局限于对象中的东西吗?这就像说,“我想要额外的东西的潜力,但我不想访问它。”我忽略了VB或Java中后期绑定的实际用途吗?你有相反的想法。通过使用早期绑定,您将自己限制为变量类型的成员。如果选项严格限制在上,则声明为类型对象的变量将只允许您访问类型对象的成员,而不管它实际引用的对象的类型如何。使用选项Strict Off
选项严格限制在
上,则声明为类型对象
的变量将只允许您访问类型对象
的成员,而不管它实际引用的对象的类型如何。使用选项Strict Off
,您可以访问类型为Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行
后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为typeObject
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行
顺便说一句,后期绑定不需要使用type
Object
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型控件,然后使用特定于类型按钮的成员您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果选项严格限制在
上,则声明为类型对象
的变量将只允许您访问类型对象
的成员,而不管它实际引用的对象的类型如何。使用选项Strict Off
,您可以访问类型为Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行
后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为typeObject
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行
顺便说一句,后期绑定不需要使用typeObject
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型控件,然后使用特定于类型按钮的成员您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果选项严格限制在
上,则声明为类型对象
的变量将只允许您访问类型对象
的成员,而不管它实际引用的对象的类型如何。使用选项Strict Off
,您可以访问类型为Object
的变量上任何名称的成员,编译器不会抱怨。只有在运行时才进行任何类型检查,只要分配给变量的实际对象具有具有该名称的成员,代码就会运行
后期绑定最常见的用途可能是办公自动化。现在还有其他选择,但在过去,如果您引用了Office库并使用了其中包含的特定类型,从而有助于早期绑定,那么您只能使用特定版本的Office。为了支持多个版本,您必须放弃引用,将所有变量声明为typeObject
,并使用后期绑定。只要运行时出现的Office版本包含所用对象上的指定成员,代码就可以正常运行
顺便说一句,后期绑定不需要使用typeObject
,尽管它可能是最常见的。这仅仅意味着引用的派生类型比对象的派生类型少,并且您使用引用类型没有的对象类型的成员,例如,您使用类型控件,然后使用特定于类型按钮的成员您将其向后移动。通过使用早期绑定,您将自己限制为变量类型的成员。如果选项严格限制在
上,则声明为类型对象
的变量将只允许您访问类型对象
的成员,而不管它实际引用的对象的类型如何。使用选项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