gpt4 book ai didi

.net - VB.NET中CallbyName函数的缺点?

转载 作者:行者123 更新时间:2023-12-04 07:30:19 26 4
gpt4 key购买 nike

使用 CallByName function 是否有任何性能劣势?在 VB.NET 中?从 .NET 2.0 开始,有没有更好的方法来按名称进行调用。

最佳答案

CallByBame 基本上为您提供“后期绑定(bind)”,即“在运行时找出方法”,而不是编译器为您找出方法的“早期绑定(bind)”。

使用早期绑定(bind),您可以确保类型安全,并且您将获得更好的性能,因为您的代码将直接进入该方法。编译器会提前为您“查找”。

后期绑定(bind)性能较慢,因为在运行时查找该方法并且您没有类型安全 - 这意味着该方法可能实际上不存在并且您可能会遇到异常。但是,如果您由于某种原因不知道对象的类型,这可能会很方便。如果我不想弄乱互操作程序集,我也用它来调用 COM 对象。

CallByName 最有可能调用 Type.InvokeMember。如果你想直接做,这是我想出的一些代码:

Imports System.Reflection   ' For access to BindingFlags '

Friend NotInheritable Class LateBinding

Private Const InvokePublicMethod As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod

Private Const GetPublicProperty As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.GetProperty

Public Shared Function InvokeFunction(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object

Return oObject.GetType().InvokeMember(sName, InvokePublicMethod, Nothing, oObject, yArguments)

End Function

Public Shared Function GetProperty(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object

Return oObject.GetType().InvokeMember(sName, GetPublicProperty, Nothing, oObject, yArguments)

End Function

End Class

关于.net - VB.NET中CallbyName函数的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com