zoukankan
html css js c++ java
利用反射动态调用类成员[原创]
1
.首先建立一个类
class
PropertyClass
{
public
PropertyClass()
{
}
public
PropertyClass(
ref
Int32 x)
{
x
*=
5
;
}
public
int
fieldValue
=
0
;
private
string
name;
public
string
Name
{
get
{
return
name; }
set
{ name
=
value; }
}
public
int
GetInt(
int
value)
{
return
value;
}
public
void
Display(
string
str)
{
Console.WriteLine(str);
}
public
override
String ToString()
{
return
fieldValue.ToString();
}
}
2
.用反射的方式调用这个PropertyClass类中的方法
public
static
void
instanceLove()
{
PropertyClass propertyClass
=
new
PropertyClass();
Type type
=
propertyClass.GetType();
//
Type type = typeof(propertyClass);效果和上面语句一样,只是写法不同。
object
obj
=
type.InvokeMember(
null
, BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.CreateInstance,
null
,
null
,
new
object
[]
{ }
);
//
调用没有返回值的方法
//
运行之后的结果[Hello World]
type.InvokeMember(
"
Display
"
, BindingFlags.InvokeMethod
|
BindingFlags.Public
|
BindingFlags.Instance,
null
, obj,
new
object
[]
{
"
Hello World
"
}
);
//
调用有返回值的方法
//
运行之后的结果[1982]
int
i
=
(
int
)type.InvokeMember(
"
GetInt
"
, BindingFlags.InvokeMethod
|
BindingFlags.Public
|
BindingFlags.Instance,
null
, obj,
new
object
[]
{
1982
}
);
//
设置属性值
//
此时的Name 's Value为[My Name is Brian Lei]
type.InvokeMember(
"
Name
"
, BindingFlags.SetProperty,
null
, obj,
new
object
[]
{
"
My Name is Brian Lei
"
}
);
//
获取属性值
//
运行之后的结果[My Name is Brian Lei]
string
str
=
(
string
)type.InvokeMember(
"
Name
"
, BindingFlags.GetProperty,
null
, obj,
null
);
//
设置字段值
type.InvokeMember(
"
fieldValue
"
, BindingFlags.SetField,
null
, obj,
new
object
[]
{
813
}
);
//
获取字段值
//
运行之后的结果[813]
int
f
=
(
int
)type.InvokeMember(
"
fieldValue
"
, BindingFlags.GetField,
null
, obj,
null
);
//
调用override方法
//
运行之后的结果[813]
String s
=
(String)type.InvokeMember(
"
ToString
"
, BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.InvokeMethod,
null
, obj,
null
);
//
调用构造方法
//
运行之后的结果[8*5=40]
Object objs
=
type.InvokeMember(
null
,BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.CreateInstance,
null
,
null
,
new
Object[]
{
8
}
);
}
3
.写个Main函数测试一下
class
EntryPoint
{
static
void
Main()
{
Test.instanceLove();
}
}
查看全文
相关阅读:
LINUX学习-Mysql集群-一主多从
LINUX学习-Mysql集群-主主备份
LINUX学习-Mysql集群-主从服务器备份
LINUX学习-Nginx+JDK+Tomcat+Mysql搭建JAVA WEB
LINUX学习-Nginx实现https
LINUX学习-Nginx服务器的反向代理和负载均衡
LINUX学习-PHP安装
LINUX学习-Mysql安装
Lens in Scala
scala中的 Type Lambda
原文地址:https://www.cnblogs.com/RuiLei/p/674833.html
最新文章
a标签,伪类选择器link不生效问题
测试面试题总结-第一章
Markdown 常用写法
jmeter连接数据库
jenkins定时执行脚本,自动发送邮件到邮箱
APP自动化测试内嵌H5三种处理方式(基于python)
接口自动化测试(该文章属于各方面整理所得,非原创)
APP自动化常用adb命令
Mac iTerm2 配置lrzsz
Linux基础命令
热门文章
Mac上安装MySQL-python遇到的问题和解决方法
使用AWS全球加速后由于服务器ttl值太小导致的客户端无法连接服务器排查
Mac下好用的软件
Golang连接redis时遇到的坑
用PHP自带的webserver调试程序
kubernetes技能图谱
Python知识图谱
多个Python版本的管理
SpringBoot--热部署
LINUX学习-Mysql集群-多主一从备份
Copyright © 2011-2022 走看看