Codehighlightingproducedby" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

圖解DotNet框架之五:System.Reflection

系統(tǒng) 1866 0

( 聲明:本系列只想給大家介紹.net框架,并不是語法和類的使用的講解,所以只能概括的描述一下所提到的類,如果有疑問可以到MSDN上面去查 )

這篇文章我們來學(xué)習(xí)System.Reflection,.net中反射的核心類.先來看圖:

圖解DotNet框架之五:System.Reflection

前面的文章,我們說過.net的元數(shù)據(jù)可以完整地描述類型,那么通過System.Reflection,可以在運行時發(fā)現(xiàn)類型格式,我們來看一下元數(shù)據(jù):

源代碼:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> class Class2
{

private int x;
private int y;
public Class2( int a, int b)
{
x
= a;
y
= b;
}

public int Add()
{
return x + y;
}

}

元數(shù)據(jù),請看代碼注釋

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> TypeDef# 2 ( 02000003 )
// -------------------------------------------------------
// TypDefName:Class2(02000003)
// Flags:[NestedPrivate][AutoLayout][Class][AnsiClass][BeforeFieldInit](00100003)
// Extends:01000002[TypeRef]System.Object
// EnclosingClass:Test.Class1(02000002)
// Field#1(04000004)
// -------------------------------------------------------
// FieldName:x(04000004) // /字段名
// Flags:[Private](00000001) // 訪問修飾
// CallCnvntn:[FIELD]
// Fieldtype:I4 // 字段類型
//
// Field#2(04000005)
// -------------------------------------------------------
// FieldName:y(04000005)
// Flags:[Private](00000001)
// CallCnvntn:[FIELD]
// Fieldtype:I4
//
// Method#1(06000004)
// -------------------------------------------------------
// MethodName:.ctor(06000004) // /構(gòu)造函數(shù)
// Flags:[Public][HideBySig][ReuseSlot][SpecialName][RTSpecialName][.ctor](00001886) // 訪問修飾
// RVA:0x00002083
// ImplFlags:[IL][Managed](00000000) // CLR托管代碼
// CallCnvntn:[DEFAULT]
// hasThis
// ReturnType:Void // 返回類型
// 2Arguments
// Argument#1:I4
// Argument#2:I4
// 2Parameters // 參數(shù)列表
// (1)ParamToken:(08000003)Name:aflags:[none](00000000) // 參數(shù)類型
// (2)ParamToken:(08000004)Name:bflags:[none](00000000)
//
// Method#2(06000005)
// -------------------------------------------------------
// MethodName:Add(06000005)方法名
// Flags:[Public][HideBySig][ReuseSlot](00000086) // 訪問修飾
// RVA:0x00002099
// ImplFlags:[IL][Managed](00000000)
// CallCnvntn:[DEFAULT]
// hasThis
// ReturnType:I4 // 返回類型
// Noarguments.
//

我們看到在元數(shù)據(jù)種非常詳細(xì)的定義了一個類中的任何成員,還包括了程序集所引用的其他程序集的信息

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> AssemblyRef# 1 ( 23000001 )
// -------------------------------------------------------
// Token:0x23000001
// PublicKeyorToken:b77a5c561934e089
// Name:mscorlib
// Version:2.0.0.0
// MajorVersion:0x00000002
// MinorVersion:0x00000000
// BuildNumber:0x00000000
// RevisionNumber:0x00000000
// Locale:<null>
// HashValueBlob:
// Flags:[none](00000000)
//
//

OK,了解了元數(shù)據(jù),我們現(xiàn)在來看看上面圖中,那些類的基本功能,.NetFrameWork庫類的層次程序集包含模塊,模塊包含類型,類型又包含成員(方法,屬性,字段,事件等)。

1.Assembly:主要是加載和操縱一個程序集.

2.ParameterInfo:該類保存給定參數(shù)的信息,也就是說方法的參數(shù),可以用該類來操作.

3.Module:訪問帶有多文件程序集的給定模塊,可以認(rèn)為就是命名空間.

4.MemberInfo:該類是抽象基類,為他的子類定義了公共的行為.如MemberTypes,MemberName等.而他的子類則分別是方法,屬性,字段,事件等信息的具體實現(xiàn).

那么這些類如何來完成類型的反射呢?

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> Assemblyasm = Assembly.Load( " Test " ); // dll的名稱
Typet = asm.GetType( " Test.Class2 " ); // 類的完全命名
object obj = Activator.CreateInstance(t); // 創(chuàng)建Class2的實例
MethodInfomi = t.GetMethod( " Add " ); // 獲取Class2中Add方法的信息.
string s = ( string )mi.Invoke(obj, null ); // 執(zhí)行方法,需要參數(shù)1:Class2的實例,2:方法的參數(shù)列表.

FieldInfopi
= t.GetField( " x " ); // 獲取字段信息
pi.GetValue(obj); // 得到字段值

事件和屬性的反射調(diào)用,同上述代碼差不多,不再贅述.上面的代碼中我們使用了Type這個類型,這里做一下簡單的介紹

System.Type定義了大量的成員,可以用來檢查一個類型的元數(shù)據(jù),如GetMethod,GetFields等方法,基本上一個類型的所有信息都可以得到,很好很強(qiáng)大.呵呵.

圖解DotNet框架之五:System.Reflection


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品久久久久久久9999 | 天天干夜夜艹 | 97色在线观看免费视频 | 日本爱爱视频 | 人人骚 | 五月激激激综合网色播免费 | 999奇米| 久久大胆视频 | 草草在线播放 | 精品国产一区二区三区久久 | 国产一区二区三区免费在线观看 | 亚洲另类老妇videos | 免费国产不卡午夜福在线 | 香蕉18xxoo欧美夜视频 | www.免费黄色 | 亚洲日本欧美日韩高观看 | 久久精品国产国语对白 | 2级毛片| 久久久日韩精品国产成人 | 亚洲欧美日韩成人 | 国产伦精品一区二区三区 | 国产精品久久国产三级国不卡顿 | 亚洲一区二区三区播放在线 | 国产3344永久在线观看视频 | 国产羞羞视频在线播放 | 天天做天天爱天天爽天天综合 | 免费久久精品视频 | 久久久久琪琪免费影院 | 桃色网站入口 | 毛片视频播放 | 日本一级毛片私人影院 | 国产精品一级视频 | 色老头老太做爰视频在线观看 | 久久综合噜噜激激的五月天 | 中文字幕在线观看一区二区三区 | 狠狠亚洲婷婷综合色香五 | 波多野结衣一区二区在线 | 夜夜撸日日干 | 国产911情侣拍拍在线播放 | 国产高清在线精品一区二区三区 | 午夜免费福利视频 |