CallByBame基本上给你“后期绑定”,即“在运行时找出方法”,而不是“早期绑定”,编译器会为你找出它.
使用早期绑定,您可以是类型安全的,并且您将获得更好的性能,因为您的代码将直接使用该方法.编译器会提前为您“查找”.
由于在运行时查找方法并且您没有类型安全性,因此后期绑定性能较慢,这意味着该方法可能实际上不存在,您可能会遇到异常.但如果由于某种原因你不知道对象的类型,这可能会很方便.如果我不想弄乱互操作程序集,我也用它来调用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,GetPublicProperty,yArguments) End Function End Class
原文地址:https://www.jb51.cc/vb/255859.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。