国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#學(xué)習(xí)-程序集和反射

2019-11-17 02:31:51
字體:
供稿:網(wǎng)友

C#學(xué)習(xí)-程序集和反射

準(zhǔn)備項(xiàng)目
1.新建一個(gè)空的解決方案MyPRoj.sln 2.在該解決方案下,建一個(gè)控制臺(tái)項(xiàng)目P01.csproj 3.在該項(xiàng)目下,自己新建一個(gè)類MyFirstClass.cs image
查看解決方案MyProj.sln,知道本次要編譯哪個(gè)項(xiàng)目 image
查看項(xiàng)目文件P01.csproj(其實(shí)就是一個(gè)xml文檔),可以知道本次程序會(huì)編譯的類 image
類庫編譯成程序集 在bin目錄下生成*.dll或*。exe 程序集包含哪些內(nèi)容: 類型元數(shù)據(jù)【以二進(jìn)制的形式,描述代碼中定義的每一個(gè)類型和成員】 程序集元數(shù)據(jù)【程序集清單,版本號(hào),名稱等】 IL代碼【這些都被裝在exe或dll中】 資源文件【比如圖片這些】
說明:程序集是在硬盤上的,如果每次要用到某個(gè)類的話,都去硬盤上讀,速度會(huì)很慢, 所以VS會(huì)在程序第一次運(yùn)行的時(shí)候,將程序集加載到內(nèi)存中運(yùn)行。 程序集(*.dll,*exe) -->加載到 內(nèi)存中 就是Assembly對象 類(接口)--> 加載到內(nèi)存中就是 Assembly下的Type對象 類的成員 --> 加載到內(nèi)存 就是 Type下的相應(yīng)對象(FieldInfo,PropertyInfo,MethodInfo,EventInfo)
 
什么是反射: 1.在程序運(yùn)行時(shí),              動(dòng)態(tài) 獲取 加載程序集              動(dòng)態(tài) 獲取 類型(類,接口)              動(dòng)態(tài) 獲取 類型的成員 信息(字段,屬性,方法) 2.在運(yùn)行時(shí),              動(dòng)態(tài) 創(chuàng)建類型實(shí)例,以及 調(diào)用 和訪問 這些 實(shí)例 成員
程序集(Assembly對象)===》類,接口(Type對象)===》類的成員(**Info)
 
獲取Assembly的方式: 獲取當(dāng)前 應(yīng)用程序域中 所有的Assembly:        AppDomain.CurentDomain.GetAssemblies(); 獲取當(dāng)前 對象 所在的 Assembly        this.GetType().Assembly 根據(jù)路徑加載Assembly       Assembly.LoadFrom(命名空間.類名)
獲取Type對象的方式 1.通過類 獲得 對應(yīng)          Type:Type t = typeof(Person) 2.通過對象 獲得          Type:Type t = p.GetType() 3.根據(jù)類的全名稱 獲取程序集中定義的類          Type type = Assembly.GetType(“命名空間.類名”) 4.獲取程序集中定義的所有的public類          Type[] types = assembly.GetExportedTypes 5.獲取程序集中定義的所有的類型          Type[] types = assembly.GetTypes()
獲取Type的成員 屬性:         type.Assembly:獲取type所在程序集對象         type.FullName:獲取type對象對應(yīng)的類的全名稱         type.Name:獲取type對象對應(yīng)類的 名稱         type.IsArray:判斷type是否為一個(gè)數(shù)組類         type.IsEnum:判斷type是否為一個(gè)枚舉類 方法:         type.IsAssignableFrom(Type i):判斷type是否實(shí)現(xiàn)了接口i         type.IsSubclassOf(Type father):判斷type是否繼承了father         type.IsInstanceOfType(object o):判斷o是否為type類的實(shí)例         type.GetFiled(“gender“):獲取type中名為gender的字段對象         type.GetProperty(“Age”):獲取type中名為Age的屬性對象         type.GetMethod(“SayHi”):獲取type中名為SayHi的方法對象
反射- FiledInfo字段對象
static void Main(string[] args){    Dog dObj=new Dog()    {        dogName = "小白",        dogAge = 1    };    Type dType = dObj.GetType();    //獲取字段對象    FieldInfo fieldDogName = dType.GetField("dogName");    //獲取dObj對象的dogName字段值,即dObj.dogName    string strName = fieldDogName.GetValue(dObj) as string;    //設(shè)置dObj里dogName字段賦值    fieldDogName.SetValue(dObj,"小黑");    Console.WriteLine(dObj.dogName);    Console.ReadKey();}

反射-PropertyInfo屬性對象

static void Main(string[] args){    Dog dObj = new Dog() {Name = "小白", Age = 1};    Type dType = dObj.GetType();    //獲取屬性對象    PropertyInfo proName = dType.GetProperty("Name");    //獲取dObj對象的Name屬性,即dObj.Name    string strName = proName.GetValue(dObj) as string;    //設(shè)置dObj里面Name屬性值    proName.SetValue(dObj,"小黑");    Console.WriteLine(dObj.Name);    Console.ReadKey();}

反射-MethodInfo方法對象

static void Main(string[] args){   Dog dObj=new Dog();    Type dType = dObj.GetType();    MethodInfo method = dType.GetMethod("Smile");    //普通調(diào)用方法    object res1 = dObj.Smile("小白");    //反射調(diào)用dObj的Smile方法,即dObj.Smile("小黑")    //第一個(gè)參數(shù)是實(shí)例對象,第二個(gè)參數(shù)是方法的參數(shù)數(shù)組    object res2 = method.Invoke(dObj, new object[] {"小黑"});        Console.WriteLine(res1+" /n"+res2);    Console.ReadKey();}

動(dòng)態(tài)創(chuàng)建對象

static void Main(string[] args){    //方法一:通過Activator 動(dòng)態(tài)創(chuàng)建對象    Type dType = typeof (Dog);    //調(diào)用帶兩個(gè)參數(shù)的構(gòu)造函數(shù)    Dog dogXB = Activator.CreateInstance(dType,new object[]{"小白",1}) as Dog;    Console.WriteLine(dogXB.Name+"/t"+dogXB.Age);    //方法二:使用 構(gòu)造器 動(dòng)態(tài)創(chuàng)建對象    Type dTypeXH = typeof (Dog);    //獲得 帶兩個(gè)參數(shù)的 構(gòu)造函數(shù)    ConstructorInfo ctor = dType.GetConstructor(new Type[] {typeof (string), typeof (int)});    //創(chuàng)建 指定構(gòu)造函數(shù)    Dog dogXH = ctor.Invoke(new object[] {"小黑", 2}) as Dog;    Console.WriteLine(dogXH.Name+"/t"+dogXH.Age);        Console.ReadKey();}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 博罗县| 扎囊县| 双柏县| 陇南市| 瑞昌市| 柳河县| 大姚县| 普安县| 德惠市| 曲水县| 长春市| 伊川县| 仁怀市| 吉林省| 东台市| 尉犁县| 北安市| 平昌县| 榕江县| 高淳县| 新郑市| 神农架林区| 松江区| 苏州市| 小金县| 乌鲁木齐县| 江山市| 资兴市| 兴海县| 新乡县| 五指山市| 海淀区| 琼结县| 黄龙县| 加查县| 齐河县| 疏勒县| 乡宁县| 京山县| 嘉义市| 阜康市|