欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Mcad學(xué)習(xí)筆記之通過(guò)反射調(diào)用類的方法,屬性,字段

系統(tǒng) 1866 0

Type是System.Reflection功能的根 (Root),也是存取Metadata的主要方法.
使用Type的成員可以取得相關(guān)資訊,例如建構(gòu)函式(Constructor),方法,字段,屬性和類別的事件,以及模組和部署類別的組件(Assembly).

3種取得Type的方法:
1.靜態(tài)方法
Type.GetType()
2.運(yùn)算符
typeof()
3.實(shí)例的方法GetType
Employee e=new Employee();
e.GetType()

在一般情況下我們調(diào)用的方法並傳遞給它們的參數(shù),某些情況下可能希望根據(jù)用戶操作動(dòng)態(tài)調(diào)用方法.
通過(guò)Reflection命名空間
方法1是使用Type對(duì)象上的InvokeMember方法
方法2是使用MethodInfo對(duì)象上的Invoke方法

example:
先定義類Employee
其中有靜態(tài)屬性Data
實(shí)例屬性Name,ID
2個(gè)索引器

???? /// ? <summary>
????
/// ?自定義類
????
/// ? </summary>
???? public ? class ?Employee
????{
????????
string ?name;
????????
int ?id;

????????ArrayList?list;?

????????
static ? int ?data;
????????
????????
// instance?.ctor()
???????? public ?Employee(? int ?id,?String?name?)?
????????{
????????????
this .name? = ?name;
????????????
this .id? = ?id;

????????????list
= new ?ArrayList();

????????????
this .list.Add(? " 001 " ?);
????????????
this .list.Add(? " 002 " ?);
????????}

????????
// static?.ctor()
???????? static ?Employee()
????????{
????????????data
= 119 ;
????????}

????????
public ? override ? string ?ToString?()
????????{
????????????
return ? " Id= " + ?id.ToString()? + ? " ,?Name= " ? + ?name;
????????}

????????
// instance?Method?"add"
???????? public ? string ?add(? string ?key1, string ?key2?)
????????{
????????????
string ?result = key1 + key2;
????????????
return ?result;
????????}
????????
????????
// static?Method?"add"
???????? public ? static ? string ?add(? string ?key1, string ?key2, string ?key3?)
????????{
????????????
return ?key1 + key2 + key3;
????????}

????????
public ? string ?Name?
????????{
????????????
get ?
????????????{?
????????????????
return ??name;?
????????????}
????????????
set ?
????????????{?
????????????????name?
= ?value;?
????????????}
????????}

????????
public ? int ?ID?
????????{
????????????
get ?
????????????{?
????????????????
return ??id;?
????????????}
????????????
set ?
????????????{?
????????????????id?
= ?value;?
????????????}
????????}

????????
public ? static ? int ?Data
????????{
????????????
get
????????????{
????????????????
return ?data;
????????????}
????????????
set
????????????{
????????????????data
= value;
????????????}
????????}

????????
/// ? <summary>
????????
/// ?by?index
????????
/// ? </summary>
???????? public ? string ? this ?[? int ?index?]
????????{
????????????
get
????????????{
????????????????
return ?list[index].ToString();
????????????}
????????????
set
????????????{
????????????????list[index]
= value;
????????????}
????????}

????????
/// ? <summary>
????????
/// ?by?value
????????
/// ? </summary>
???????? public ? string ? this ?[? string ?values]
????????{
????????????
set
????????????{
????????????????
this [list.IndexOf(values)] = value;
????????????}
????????}

????}

動(dòng)態(tài)調(diào)用:

定義變量

???????????? string ?result = String.Empty;
????????????
int ?i;

????????????Type?t
= typeof (?Employee?);
????????????
????????????Employee?e
= new ?Employee( 1000 , " no?1000 " );



方法1是使用Type對(duì)象上的InvokeMember方法:
先動(dòng)態(tài)調(diào)用類Employee的實(shí)例方法ToString
InvokeMember方法的第一個(gè)參數(shù)是要調(diào)用的方法名稱
第2個(gè)參數(shù)是位枚舉,代表搜尋的方式
第四個(gè)參數(shù)是要調(diào)用的對(duì)象,要是靜態(tài)的就用null
第五個(gè)參數(shù)是要傳送給ToString的數(shù)值,由於ToString方法是無(wú)參方法,這裡我們送一個(gè)空數(shù)組new object[]{}

1 ? ???????????? // call?instance?Method?"ToString"
2 ? ????????????result = ( typeof (Employee).InvokeMember( " ToString " ,
3 ? ????????????????????????????????????????????????????BindingFlags.InvokeMethod,????
4 ? ???????????????????????????????????????????????????? null ,
5 ? ????????????????????????????????????????????????????e,????
6 ? ???????????????????????????????????????????????????? new ? object []{})).ToString();
7 ? ????????????Console.WriteLine( " instance?Method?'ToString'?result={0} " ,?result?);
8 ?


再動(dòng)態(tài)調(diào)用類Employee的實(shí)例方法add,靜態(tài)方法add
注意InvokeMember方法的第5個(gè)參數(shù)代表的是要傳送給add方法的數(shù)值
第8個(gè)參數(shù)代表的是add方法的參數(shù)名稱

???????????? // call?instance?Method?"add"
????????????result = typeof (Employee).InvokeMember( " add " ,
????????????????????????????????????????????????BindingFlags.InvokeMethod,
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????e,
????????????????????????????????????????????????
new ? object []{ " o1 " , " o2 " },
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
new ? string []{ " key1 " , " key2 " }).ToString();
????????????Console.WriteLine(
" instance?Method?'add'?result={0} " ,?result?);

????????????
// call?static?Method?"add"
????????????result = typeof (Employee).InvokeMember( " add " ,
????????????????????????????????????????????????BindingFlags.InvokeMethod?
| ?BindingFlags.Static? | ?BindingFlags.Public?,
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
new ? object []{ " o1 " , " o2 " , " o3 " },
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
null ,
????????????????????????????????????????????????
new ? string []{ " key1 " , " key2 " , " key3 " }).ToString();
????????????Console.WriteLine(
" static?Method?'add'?result={0} " ,result?);
????????????Console.WriteLine();


再修改靜態(tài)屬性Data,把它從119修改為911

?1 ? ???????????? // call?static?Property
?2 ? ????????????i = ( int ) typeof (Employee).InvokeMember( " Data " ,
?3 ? ????????????????????????????????????????????????BindingFlags.GetProperty? | ?BindingFlags.Public? | ?BindingFlags.Static,
?4 ? ???????????????????????????????????????????????? null ,
?5 ? ???????????????????????????????????????????????? null ,
?6 ? ???????????????????????????????????????????????? new ? object []{});
?7 ? ????????????Console.WriteLine( " static?Property?'Data'={0} " ,?i?);
?8 ?
?9 ? ???????????? // update?static?Property
10 ? ???????????? typeof (Employee).InvokeMember( " data " ,
11 ? ????????????????????????????????????????????BindingFlags.SetField? | ?BindingFlags.NonPublic? | ?BindingFlags.Static,
12 ? ???????????????????????????????????????????? null ,
13 ? ???????????????????????????????????????????? null ,
14 ? ???????????????????????????????????????????? new ? object []{ 911 });
15 ? ????????????Console.WriteLine( " update?static?Property? " );
16 ?
17 ? ???????????? // call?static?Property
18 ? ????????????i = ( int ) typeof (Employee).InvokeMember( " Data " ,
19 ? ????????????????????????????????????????????????BindingFlags.GetProperty? | ?BindingFlags.Public? | ?BindingFlags.Static,
20 ? ???????????????????????????????????????????????? null ,
21 ? ???????????????????????????????????????????????? null ,
22 ? ???????????????????????????????????????????????? new ? object []{});
23 ? ????????????Console.WriteLine(? " again?call?static?Property?'Data'={0} " ,i?);
24 ? ????????????Console.WriteLine();
25 ?


再修改實(shí)例屬性Name,把它從no 1000修改為w

?1 ? ???????????? // read?instance?Property
?2 ? ????????????result = typeof (Employee).InvokeMember( " Name " ,
?3 ? ????????????????????????????????????????????????BindingFlags.GetProperty?,
?4 ? ???????????????????????????????????????????????? null ,????
?5 ? ????????????????????????????????????????????????e,????
?6 ? ???????????????????????????????????????????????? new ? object []{}).ToString();
?7 ? ????????????Console.WriteLine(? " instance?Property?'Name'={0} " ,?result?);
?8 ?
?9 ? ???????????? // update?instance?property
10 ? ???????????? typeof (Employee).InvokeMember( " name " ,?
11 ? ????????????????????????????????????????????BindingFlags.SetField? | ?BindingFlags.NonPublic?? | ?BindingFlags.Instance????,
12 ? ???????????????????????????????????????????? null ,
13 ? ????????????????????????????????????????????e,
14 ? ???????????????????????????????????????????? new ? object []{ " w " });
15 ? ????????????Console.WriteLine( " update?instance?property? " );
16 ? ????????????
17 ? ???????????? // again?call?read?instance?Property
18 ? ????????????result = typeof (Employee).InvokeMember( " Name " ,
19 ? ????????????????????????????????????????????????????BindingFlags.GetProperty?,
20 ? ???????????????????????????????????????????????????? null ,????
21 ? ????????????????????????????????????????????????????e,
22 ? ???????????????????????????????????????????????????? new ? object []{}).ToString();
23 ? ????????????Console.WriteLine(? " again?call?instance?Property?'Name'={0} " ,?result?);
24 ? ????????????Console.WriteLine();
25 ?


再修改索引器,把索引器的第2個(gè)(index[1])內(nèi)容修改為222
注意修改索引器的InvokeMember方法,第5個(gè)參數(shù)的數(shù)組new object[]{"002","222"}
將要設(shè)置元素的索引值放在對(duì)象數(shù)組的第一個(gè)元素中,將要設(shè)置的值作為第二個(gè)元素

?1 ? ???????????? // call?index[1]?
?2 ? ????????????result = typeof (Employee).InvokeMember( " Item " ,
?3 ? ????????????????????????????????????????????????????BindingFlags.GetProperty,
?4 ? ???????????????????????????????????????????????????? null ,
?5 ? ????????????????????????????????????????????????????e,
?6 ? ???????????????????????????????????????????????????? new ? object []{ 1 }).ToString()?;
?7 ? ????????????Console.WriteLine( " index[1]={0} " ,?result);
?8 ?
?9 ? ???????????? // update??index[1]?
10 ? ???????????? typeof (Employee).InvokeMember( " Item " ,
11 ? ????????????????????????????????????????????BindingFlags.SetProperty,
12 ? ???????????????????????????????????????????? null ,????
13 ? ????????????????????????????????????????????e,
14 ? ???????????????????????????????????????????? new ? object []{ " 002 " , " 222 " });
15 ? ????????????Console.WriteLine( " update??index[1]? " );
16 ?
17 ? ???????????? // again?call?index[1]
18 ? ????????????result = typeof (Employee).InvokeMember( " Item " ,
19 ? ????????????????????????????????????????????????BindingFlags.GetProperty,
20 ? ???????????????????????????????????????????????? null ,
21 ? ????????????????????????????????????????????????e,
22 ? ???????????????????????????????????????????????? new ? object []{ 1 }).ToString()?;
23 ?
24 ? ????????????Console.WriteLine( " again?call?index[1]={0} " ,?result);
25 ? ????????????Console.WriteLine();
26 ?


調(diào)用構(gòu)造器
InvokeMember方法的第1個(gè)參數(shù)為空字符""

1 ? ???????????? // call?instance?.ctor()
2 ? ????????????Employee?employee = (Employee) typeof (Employee).InvokeMember( "" ,
3 ? ????????????????????????????????????????????????????????????????????????BindingFlags.CreateInstance,
4 ? ???????????????????????????????????????????????????????????????????????? null ,
5 ? ???????????????????????????????????????????????????????????????????????? null ,
6 ? ???????????????????????????

Mcad學(xué)習(xí)筆記之通過(guò)反射調(diào)用類的方法,屬性,字段,索引器(2種方法)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产欧美一区二区 | 欧美无玛| 国产 欧美 日韩 一区 | 黄色电影在线免费观看 | 丰满少妇久久久久久久 | 魔法骑士在线观看免费完整版高清 | 国产精品19禁在线观看2021 | 久久91综合国产91久久精品 | 神马久久久久久久久 | 综合第一页 | 亚洲a网| 99在线精品视频免费观里 | 一区二区三区四区国产 | 日日碰狠狠躁久久躁婷婷 | 视频一区二区中文字幕 | 欧美一级特黄aaaaaaa在线观看 | 黄色av免费看| 欧美大片在线播放 | 欧美成人全部费免网站 | 精品国产一区二区国模嫣然 | 欧美视频在线观看一区二区 | 欧美成人精品一区二区三区 | 国产免费一区二区 | 久草香蕉 | 欧美日韩国产精品 | 中文字幕 在线观看 | 久久久精品免费观看 | 久久精品桃花综合 | 欧美十区 | 日韩三级欧美 | 亚洲精品一区二区三区福利 | 日日夜夜操操操 | 日韩成人精品在线 | 欧洲精品视频完整版在线 | 欧美视频第一区 | www.qubook.| 国产一区二区精品久久91 | 久久机热综合久久国产 | 国内精品免费一区二区观看 | 午夜精品视频在线观看 | 国产精品激情福利视频 |