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();
}
}
查看全文
相关阅读:
【FROM】java控件重绘AWT/SWINGPainting in AWT and Swing (EN)
linux yum使用管理详细使用
远程控制 vc++实现
java 鼠标事件Dragged和Moved 及java显示GIF在JLabel、JButton
C语言字符串函数大全
C# 训练场(四)创建系统热键,并向活动窗口输入信息
潜移默化学会WPF(样式) DataGrid(转载)
时间查询
Sqlserver2012 根据数据库mdf文件生成log文件,解决无法附加mdf文件
我知道的一些 ”运行“ 窗体下的命令,个人使用
原文地址:https://www.cnblogs.com/RuiLei/p/674833.html
最新文章
Wordbreak 和wordwrap
IE下li 的 float:left 自动换行
全部希腊字母读音
IE浏览器常见的9个css Bug以及解决办法
新清除浮动clearfix 与 overflow:hidden [译]
WCF 第二章 契约 定义类的层次结构
WCF 第二章 契约 双向操作
WCF 第二章 契约 两个单向契约VS一个双向契约
WCF 第二章 契约 实现一个双向契约的客户端部分
WCF 第二章 契约 单向操作
热门文章
WCF 第二章 契约 在WSDL中使用KnownType暴露额外类型
WCF 第二章 契约 WSDL中的操作名字、类型、操作和命名空间
WCF 第二章 契约 实现一个双向契约的服务端部分
WCF 第二章 契约 在一个服务中实现多个契约和终结点
WCF 第二章 契约 数据契约
B树、B树、B+树、B*树都是什么
王爽 汇编语言 实验十 课程设计1
兴趣不是最好的老师
乐和一下,生活在浮云,也太快乐!
应届毕业生生存法则
Copyright © 2011-2022 走看看