解析如何使用反射调用类型成员方法,字段,属性
2023-06-13 09:15:01 时间
如下所示:
复制代码代码如下:
classProgram
{
staticvoidMain(string[]args)
{
Typet=typeof(Test);
objectresult;
Testtc=newTest();
Console.WriteLine("Invokeastaticmethod");
t.InvokeMember("Sayhello",BindingFlags.InvokeMethod|BindingFlags.Static|BindingFlags.Public,null,null,newobject[]{});
Console.WriteLine("------------------------");
Console.WriteLine("Invokeagenericmethod");
List<string>list=newList<string>();
list.Add("GuoHu");
list.Add("LeiHu");
//WeshouldassigntheparametertypetogenericmethodByusingMakeGenericMethod
MethodInfomi=t.GetMethod("Print").MakeGenericMethod(typeof(string));
mi.Invoke(null,newobject[]{list});
Console.WriteLine("------------------------");
Console.WriteLine("Invokeainstancemethod");
MethodInfom=t.GetMethod("Swap");
object[]obj=newobject[2];
obj[0]=123;
obj[1]=230;
m.Invoke(newTest(),obj);
Console.WriteLine("{0},{1}",obj[0],obj[1]);
Console.WriteLine("------------------------");
Console.WriteLine("outputfieldname");
FieldInfo[]fi=t.GetFields();
foreach(FieldInfonameinfi)
{
Console.WriteLine("{0}",name);
}
Console.WriteLine("------------------------");
Console.WriteLine("Invokeamethodwithnamedparameters");
object[]argValues=newobject[]{"Guo","Hu"};
String[]argNames=newString[]{"lastName","firstName"};
t.InvokeMember("PrintName",BindingFlags.InvokeMethod,null,null,argValues,null,null,argNames);
Console.WriteLine("------------------------");
Console.WriteLine("Getafieldvalue");
result=t.InvokeMember("Name",BindingFlags.GetField|BindingFlags.GetProperty,null,tc,newobject[]{});
Console.WriteLine("Name=={0}",result);
Console.WriteLine("------------------------");
Console.WriteLine("Setafieldvalue");
t.InvokeMember("Name",BindingFlags.SetField,null,tc,newobject[]{"Newvalue"});
result=t.InvokeMember("Name",BindingFlags.GetField|BindingFlags.GetProperty,null,tc,newobject[]{});
Console.WriteLine("Name=={0}",result);
}
}
classTest
{
publicstringName;
publicTest()
{
Name="InitilizeName";
}
publicstaticvoidSayhello()
{
Console.WriteLine("Sayhello");
}
publicstaticvoidPrint<T>(IEnumerable<T>item)
{
foreach(Ttinitem)
{
Console.WriteLine("{0}",t);
}
}
publicstaticvoidPrintName(StringfirstName,StringlastName)
{
Console.WriteLine("{0},{1}",lastName,firstName);
}
publicvoidSwap(refinta,refintb)
{
intx=a;
a=b;
b=x;
}
}
相关文章
- Python对象的私有属性和私有方法
- 「python」私有属性和私有方法(扩展知识)
- 【机房重构】“ConnectionString属性尚未初始化”「建议收藏」
- 反射getmethod参数_java通过反射获取属性值
- 解决问题:jar中没有主清单属性「建议收藏」
- jquery回车监听事件及html自定义属性的应用
- java反射之Field用法(获取对象的字段名和属性值)
- 学习下meta标签http-equiv=Content-Security-Policy的属性及其作用吧
- WPF 属性变动后的业务处理及恢复原始值的方法
- 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
- 【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )
- 【MATLAB】进阶绘图 ( MATLAB 颜色值 | 条形图示例 | 查找对象属性方法 | 修改条形图属性 )
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
- Android中android:visibility的3中属性的剖析详解手机开发
- input框改变type属性详解编程语言
- ios jquery css(‘left’)无法读取属性解决的方法详解编程语言
- JS hasOwnProperty()方法:检测一个属性是否是对象的自有属性
- JS currentStyle属性和getComputedStyle()方法:读取CSS显示样式
- JS document节点及其常用属性和方法
- Oracle数据库中修改列可空属性的实现(oracle 修改列可空)
- 第六节--访问属性和方法
- aspadodb.stream对象的方法/属性
- javascriptcreateElement()创建input不能设置name属性的解决方法
- JAVA读取属性文件的几种方法总结
- jquery日期控件datepicker属性详细解析
- IE里button设置border:none属性无效解决方法
- FileStream常用的属性与方法总结
- JS使用getComputedStyle()方法获取CSS属性值
- CSS3中Transition属性详解以及示例分享
- C#实现ProperTyGrid自定义属性的方法