最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(一)

 更新時(shí)間:2013年07月10日 10:32:50   作者:  
其實(shí)說(shuō)白了,反射就是能知道我們未知類(lèi)型的類(lèi)型信息這么一個(gè)東西.沒(méi)什么神秘可講!反射的核心是System.Type。System.Type包含了很多屬性和方法,使用這些屬性和方法可以在運(yùn)行時(shí)得到類(lèi)型信息

反射(reflection)是一種允許用戶(hù)獲得類(lèi)型信息的C#特性。術(shù)語(yǔ)“反射”源自于它的工作方式:
Type對(duì)象映射它所代表的底層對(duì)象。對(duì)Type對(duì)象進(jìn)行查詢(xún)可以獲得(反射)與類(lèi)型相關(guān)的信息。反射是一種
功能強(qiáng)大的機(jī)制,它允許學(xué)習(xí)和使用只在運(yùn)行時(shí)才能知道的類(lèi)型功能。

這些是官方定義,其實(shí)說(shuō)白了,反射就是能知道我們未知類(lèi)型的類(lèi)型信息這么一個(gè)東西.沒(méi)什么神秘可講!
反射的核心是System.Type。System.Type包含了很多屬性和方法,使用這些屬性和方法可以在運(yùn)行時(shí)得到類(lèi)型信息。
一旦得到類(lèi)型信息,就可以調(diào)用其構(gòu)造函數(shù)、方法和屬性。因此,反射允許使用編譯時(shí)不可用的代
碼。因?yàn)榉瓷渖婕皟?nèi)容太多,我們主要學(xué)習(xí)常用的反射技術(shù)。

一、獲取方法的相關(guān)信息
一旦有了Type對(duì)象,就可以使用GetMethods()方法來(lái)獲取此類(lèi)型支持的方法的列表。它的一種形式為:
MethodInfo[] GetMethods()
MethodInfo對(duì)象描述了主調(diào)類(lèi)型所支持的方法,因此可以通過(guò)它的Name屬性獲得方法的名稱(chēng)。同時(shí)它還有兩個(gè)重
要的方法,ReturnType和GetParameters()。
  
只讀屬性ReturnType為一個(gè)Type類(lèi)型的對(duì)象,它為用戶(hù)提供方法的返回類(lèi)型信息。
GetParameters()返回一個(gè)方法的參數(shù)列表,它的基本形式為:
ParameterInfo[] GetParameters();
參數(shù)信息保存在ParameterInfo對(duì)象中。ParameterInfo類(lèi)定義了大量描述參數(shù)信息的屬性和方法。
其中常用屬性是Name和ParameterType,這兩個(gè)屬性我就不介紹了,從字面上應(yīng)該可以理解了。
好了,不說(shuō)了,講了這么多概念想必大家都不耐煩了。下面我們先看代碼示例,估計(jì)你看了以后,再結(jié)合上面的
概念講解,你一定會(huì)說(shuō):哦,原來(lái)如此?。。?BR>

復(fù)制代碼 代碼如下:

class MyClass
    {
        int x;
        int y;
        public MyClass(int i, int j)
        {
            x = i;
            y = j;
        }
        public int Sum()
        {
            return x + y;
        }
        public bool IsBetween(int i)
        {
            if (x < i && i < y)
                return true;
            else
                return false;
        }
        public void Set(int a, int b)
        {
            x = a;
            y = b;
        }
        public void Set(double a, double b)
        {
            x = (int)a;
            y = (int)b;
        }
        public void Show()
        {
            Console.WriteLine("x:{0},y:{1}", x, y);
        }
    }

運(yùn)行結(jié)果:



請(qǐng)注意,除了MyClass定義的方法外,object定義的方法也會(huì)被顯示。這是因?yàn)镃#所有的類(lèi)都繼承于object。
另外,類(lèi)型名稱(chēng)(如Int32)采用的是.net結(jié)構(gòu)的名稱(chēng)。

二、GetMethods()的另外一種形式
這種形式中可以指定各種標(biāo)記,以此篩選出想要獲取的方法,它的基本形式:
MethodInfo[] GetMethods(BindingFlags flags)
這種形式只獲得與所指定的條件相匹配的方法,BindingFlages 是一個(gè)枚舉,相關(guān)知識(shí)請(qǐng)參考:
msdn上BindingFlags 枚舉

可以使用OR運(yùn)算符把兩個(gè)或者更多的標(biāo)記連接在一起。實(shí)際上,括號(hào)中至少應(yīng)包含Instance(或Static)
與Public(或NotPublic)標(biāo)記,否則將不會(huì)獲得任何方法。

GetMethods()方法的BindingFlages形式的一個(gè)主要用途在于,它可以只獲得某個(gè)類(lèi)自身定義的方法而不
獲得它從基類(lèi)繼承的方法,這對(duì)于object尤其有用。
例如用下列形式來(lái)替換前面程序中的GetMethods()語(yǔ)句:

復(fù)制代碼 代碼如下:

MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);

進(jìn)行上述更改后,程序的輸出結(jié)果為:



可以看出,這里只顯示了MyClass顯示定義的方法。

相關(guān)文章

最新評(píng)論

济南市| 黎城县| 高陵县| 灵宝市| 长阳| 化德县| 平山县| 彰化市| 东阳市| 呼伦贝尔市| 商水县| 长顺县| 东兴市| 涞水县| 潼关县| 蒙阴县| 手机| 任丘市| 大英县| 镇巴县| 安泽县| 南投市| 仁寿县| 余江县| 赤城县| 内丘县| 徐水县| 修文县| 桂东县| 德令哈市| 商河县| 乌拉特后旗| 买车| 犍为县| 宝兴县| 海晏县| 富蕴县| 依兰县| 正镶白旗| 高清| 阿合奇县|