网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月04日漏签0天
c#吧 关注:188,523贴子:823,171
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 7回复贴,共1页
<<返回c#吧
>0< 加载中...

提问:关于利用反射调用不定参数函数的问题

  • 只看楼主
  • 收藏

  • 回复
  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
理论上是利用如下反射调用函数:
( MethodBase.Invoke 方法 (Object, BindingFlags, Binder, Object(), CultureInfo))
方法声明:
public abstract Object Invoke( Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture )
我的函数是这样的:
public void CreateXLSList(params xlsData[] values)
{ ...... }
用默认参数配置读取的Invoke 方法会提示 参数计数不匹配。
所以肯定要利用支持重载的反射方法调用。
所以问题就是 BindingFlags, Binder, CultureInfo
这三个货我如何理解,MSDN的例子……我看晕了!



  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
参数
obj
类型:System.Object
对其调用方法或构造函数的对象。 如果方法是静态的,则忽略此参数。 如果构造函数是静态的,则此参数必须为 Nothing 或定义该构造函数的类的实例。
invokeAttr
类型:System.Reflection.BindingFlags
位屏蔽,它是 BindingFlags 的 0 个或多个位标志的组合。 如果 binder 为 Nothing,则此参数赋值为 Default;因此,传入的任何值都被忽略。
binder
类型:System.Reflection.Binder
一个启用绑定、参数类型强制、成员调用以及通过反射进行 MemberInfo 对象检索的对象。 如果 binder 为 Nothing,则使用默认联编程序。
parameters
类型:System.Object()
调用的方法或构造函数的参数列表。 这是一个对象数组,这些对象与要调用的方法或构造函数的参数具有相同的数量、顺序和类型。如果没有参数,则此应为 Nothing。
如果此实例表示的方法或构造函数采用 ByRef 参数,那么使用此函数调用该方法或构造函数时,对于该参数不需要特殊的特性。 如果数组中的对象未用值来显式初始化,则该对象将包含该对象类型的默认值。对于引用类型的元素,该值为 Nothing。对于值类型的元素,该值为 0、0.0 或 false,具体取决于特定的元素类型。
culture
类型:System.Globalization.CultureInfo
用于控制类型强制的 CultureInfo 的实例。 如果这是 Nothing,则使用当前线程的 CultureInfo。 (例如,这对于将表示 1000 的 String 转换为 Double 值是必需的,因为不同的区域性以不同的方式表示 1000。)



2025-09-04 07:00:24
广告
不感兴趣
开通SVIP免广告
  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
MSDN资料:http://msdn.microsoft.com/zh-cn/library/4k9x6bc0.aspx
我先继续看,有人知道的话麻烦用白话接我讲讲。。
最好可以举个例子。


  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
MethodInfo mi = obyType.GetMethod(strFuncName);//取得函数的具体方法
bRetFlag = (bool)mi.Invoke(objInstance, objPara); //传入参数并调用
其中
objInstance(object)是反射的实例
strFuncName(string)是方法名
objPara(object[])是参数
因为如果用不定参数的话,函数的参数是一个数组(我的那个例子),如果入参是3个的情况,objPara.Length就是3了,所以会报错。


  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哦对了,这个是不考虑重载的调用。。
如果你调用的函数含有重载,就不能用这种方式。
我怀疑不定参数的那个内部处理初始化是重载……所以调用不了……
我用一个偷懒的方法跳过去了。。先完成任务。。回头再自己研究好了……


  • 雪舞苍空
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
定参数还是不定参数……?
我需要调用的那个函数类似于这样的:
public void CreateXLSList(params Int32[] values)
{ ...... }
正在改一个不定层数的回溯函数。。改的我好崩溃 T v T
初步打算明天调试完我这个模块再去研究反射……
最近老想玩……没学到多少东西呢 = 0 =


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回c#吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示