Reflection.MethodInfo如何反射一个静态方法来调用

CalenNet 2010-10-12 10:45:15
寻求静态的反射调用
就是想调用下面这个静态的方法
public static bool pro_T_SizeType_SelectAll(SocketListening.Entity.T_SizeType entity, ref System.Data.DataSet p_DS, string p_ConnString)
{
return true;
}

非静态方法的反射调用代码如下


object mObj = null;

System.Reflection.Assembly mAssemblyData = System.Reflection.Assembly.Load("SocketListening.Data");

foreach (Type mTypeData in mAssemblyData.GetTypes())
{
if ((mTypeData.Namespace + "." + mTypeData.Name) == "SocketListening.Data.T_SizeType")
{
System.Data.DataSet mDS = new System.Data.DataSet();

Object[] mParameters = new Object[3];
mParameters[0] = mObj;
mParameters[1] = mDS;
mParameters[2] = "CostacoCTNConnString";

//Activator.CreateInstance()调用类的缺省构造函数来创建实例
object mDataInstance = System.Activator.CreateInstance(mTypeData);
//利用MethodInfo类来获得从指定类中的成员函数
System.Reflection.MethodInfo mMI = mTypeData.GetMethod("pro_T_SizeType_SelectAll");
//调用此成员函数
mMI.Invoke(mDataInstance, mParameters);

mDS = (System.Data.DataSet)mParameters[1];

break;
}
}


SocketListening.Data.T_SizeType非静态的部分代码如下

public class T_SizeType
{
public bool pro_T_SizeType_SelectAll(SocketListening.Entity.T_SizeType entity, ref System.Data.DataSet p_DS, string p_ConnString)
{
return true;
}
}


想改成静态的方法代码如下

public class T_SizeType
{
public static bool pro_T_SizeType_SelectAll(SocketListening.Entity.T_SizeType entity, ref System.Data.DataSet p_DS, string p_ConnString)
{
return true;
}
}





...全文
888 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
soualliron 2012-11-28
  • 打赏
  • 举报
回复
不用这么麻烦,methodInfo.Invoke(null,params)就可以了
CalenNet 2010-10-21
  • 打赏
  • 举报
回复
多谢 bloodish

bloodish 2010-10-14
  • 打赏
  • 举报
回复

public class T_SizeType
{
public static bool pro_T_SizeType_SelectAll(T_SizeType entity, ref System.Data.DataSet p_DS, string p_ConnString)
{
return true;
}
}


class Program
{
static void Main(string[] args)
{
object[] arg = new object[3]{new T_SizeType(),new System.Data.DataSet(),string.Empty};
typeof(T_SizeType).InvokeMember("pro_T_SizeType_SelectAll",
BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, arg);
}
}


是否是ref/out无需关注,重要是BindingFlags需要设置正确
BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod
静态+共有+方法调用

另外tagert参数传null即可
如果设置BindingFlags.Instance就需要一个实例


wuyq11 2010-10-14
  • 打赏
  • 举报
回复
string returnValue1 = t.InvokeMember("ClassMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, null, new object[] { }) as string;
CalenNet 2010-10-14
  • 打赏
  • 举报
回复
没人看我的贴?
游子 2010-10-12
  • 打赏
  • 举报
回复
帮你顶上去。。。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧