问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c# 中反射里的invoke方法的参数

发布网友 发布时间:2022-04-25 06:52

我来回答

3个回答

热心网友 时间:2023-11-04 22:47

一个最简单的C#反射实例,首先编写类库如下:
namespace ReflectionTest
{
public class WriteTest
{
//带参数的公共方法
public void WriteString(string s, int i)
{
Console.WriteLine("WriteString:" + s + i.ToString());
}
//带一个参数的静态方法
public static void StaticWriteString(string s)
{
Console.WriteLine("StaticWriteString:" + s);
}
//不带参数的静态方法
public static void NoneParaWriteString()
{
Console.WriteLine("NoParaWriteString");
}
}
}
class TestApp
{
public static void Main()
{
Assembly ass;
Type type;
Object obj;
//用来测试静态方法
Object any = new Object();
//指定类库文件必须使用绝对路径,不能使用相对路径
ass = Assembly.LoadFile(@"D:\Source Code\00.C#Sudy\01.Reflection\01\ReflectTest.dll");
//命名空间和类的名字必须一起指定
type = ass.GetType("ReflectionTest.WriteTest");

/**//*example1---------*/
MethodInfo method = type.GetMethod("WriteString");
string test = "test";
int i = 1;
Object[] parametors = new Object[]{test,i};
//在例子1种必须实例化反射要反射的类,因为要使用的方法并不是静态方法。
//创建对象实例
obj = ass.CreateInstance("ReflectionTest.WriteTest"); //执行带参数的公共方法
method.Invoke(obj, parametors);
//method.Invoke(any, parametors);//异常:必须实例化反射要反射的类,因为要使用的方法并不是静态方法。

/**//*example2----------*/
method = type.GetMethod("StaticWriteString");
method.Invoke(null, new string[] { "test"}); //第一个参数忽略//对于第一个参数是无视的,也就是我们写什么都不会被调用,
//即使我们随便new了一个any这样的Object,当然这种写法是不推荐的。
//但是对应在例子1种我们如果Invoke的时候用了类型不一致的实例来做为参数的话,将会导致一个运行时的错误。
method.Invoke(obj, new string[] { "test"});
method.Invoke(any, new string[] { "test"});

/**//*example3-----------*/
method = type.GetMethod("NoneParaWriteString"); //调用无参数静态方法的例子,这时候两个参数我们都不需要指定,用null就可以了。method.Invoke(null, null);
}
}
从上面的总结中可以看出,对于外部调用的动态库应用反射时要用到Assembly.LoadFile(),然后才是获取类型、执行方法等;
当用反射创建当前程序集中对象实例或执行某个类下静态方法时只需通过Type.GetType("类的完整名")。

热心网友 时间:2023-11-04 22:48

问题有点不清楚,不过params是一个参数object数组,也就是说,根据调用方法传入的参数数量的不同,可以在params的位置写多个不同类型的参数。

热心网友 时间:2023-11-04 22:48

是委托调用的方法名字
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宝马x5和GT哪个好 成考和函授的哪个更好一点 2024成考和函授的哪个更好 成考和函授哪个好 我在网上有看到跨域服务,这个可以办理具体哪些业务?补卡可以吗? 钻头有哪些规格型号 钻头大有哪些型号 九寨沟里像诗画里所描摩的能给人以美感的意境的词语 写2个能描写九寨沟的4字词语 金毛不能吃的水果 请问道光通宝(方孔)的现代价格值多少钱? java invoke 道光年的铜钱值多少钱? java invoke 反射的使用方法 java中 invoke()如何传实体进去? java反射中method类中的invoke方法是做什么的,他有什么作用? jsp中的dotag()方法,以及getjspbody(),invoke是什么原理 java反射的问题,关于invoke和instance。 java中invoke()的作用是什么? 求高手 解释一下java invoke()实现的原理。如何自己模拟写一个invoke()方法? java中的反射,invoke方法详解是什么? java中的反射,invoke方法详解 java 中 invoke()的作用是什么? 为什么要用invoke方法 如何加强学生的英语口语训练 怎样培养小学生的英语口语能力 浅谈如何提高小学英语口语能力 要怎样才能够提高小学生的英语口语水平 如何提高学生的口语 在新课标下如何提高小学生英语口语水平 道光通宝值多钱一枚 控件的Invoke方法参数 加事件和方法有什么区别? Java动态代理 InvocationHandler接口的invoke方法,是JDK实现的方法,还是程 序员自己实现的invoke方法。 道光通宝14枚,价值多少钱一枚?请大神赏眼! method的invoke方法怎么用 道光通宝有何价值 Java的动态代理中invoke方法是顺序执行的吗?我的怎么这么奇怪? 和面铜钱多少一枚? 这枚道光通宝值多少钱啊? 这枚道光通宝值多少钱 非法集资手抄报怎么画? 按照现有国家法律帮客户抄黄金外汇的投资公司是不是涉及非法集资问题? 空调制冷,显示上的数字越高,越冷,还是越低越冷? 格力空调制冷显示70f是什么意思?怎样调过来? 格力空调开制冷显示E9是什么意思? 为什么空调显示器上面制冷两个字会跳动? 普惠性幼儿园是什么样的?与普通幼儿园有什么区别? 英语空调遥控器上制冷的是显示什么 格力空调制冷显示化霜? 空调出现e6但还制冷是怎么回事?