使用 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/