97超碰碰碰_91热播_91国产免费视频_91视频合集_国产精品白丝jk白祙_国产精品久免费的黄网站

您現(xiàn)在所在的位置:首頁 >學(xué)習(xí)資源 > Unity游戲/VR/AR入門教材 > VR開發(fā)入門教程32:反射生成對象

VR開發(fā)入門教程32:反射生成對象

來源:奇酷教育 發(fā)表于:

1 用Type構(gòu)建對象用構(gòu)造函數(shù)動態(tài)生成對象:既然有反射 那就有正射對比一下:有一個class Test 有無參構(gòu)造方法獲取實例的比較:正 :由

1.用Type構(gòu)建對象
用構(gòu)造函數(shù)動態(tài)生成對象:
既然有反射 那就有“正射”
對比一下:
有一個class Test  有無參構(gòu)造方法
獲取實例的比較:
“正” :由類名直接使用關(guān)鍵字new來獲得 語法:new Test()
反射:未知類名 運行時獲得類型名:例如:Type type = Type.GetType("Test");
   Object o = type.GetConstructor (new Type[]{}).Invoke (null);
  當(dāng)然參數(shù)也可以由配置文件獲得
以上調(diào)用無參構(gòu)造 帶參的構(gòu)造怎么調(diào)用呢?
 
2.用Activator生成對象:
      Type t = typeof(NewClassw);
       //構(gòu)造函數(shù)的參數(shù)
       object[] obj = new object[2] { "實參1", "實參2" };   
       //用Activator的CreateInstance靜態(tài)方法,生成新對象
       object o = Activator.CreateInstance(t,obj);
3.Assembly生成對象:
Assembly assembly = Assembly.Load ("ReflectTest");
Object obj = assembly.CreateInstance ("ReflectTest.Wood");

反射獲取字段

一般用于已知對象時使用,同樣用正反來做對比,已知對象MyClass obj,對象內(nèi)有name這個字段。
 
正:
obj.name = "xxx"即可設(shè)置該對象的值
obj.name即可獲得該對象的值
 
反射:
//獲取類的描述對象
Type t = obj.GetType();
//取得字段描述對象
FieldInfo fi = t.GetField("name");
//獲取或設(shè)置字段值
fi.SetValue(obj, "k001");
fi.GetValue(obj);
 
一般在C#中以屬性替代字段
//獲取類的描述對象
Type t = obj.GetType();
//取得屬性描述對象
PropertyInfo pi1 = t.GetProperty("Name");
//獲取或設(shè)置屬性值
pi1.SetValue(obj, "k001",null);
pi1.GetValue(obj,null);

反射調(diào)用方法

一般用于對象、方法名、參數(shù)類型已知的情況
對象:obj 
方法名:methodName
參數(shù)類型 String int
 
正:
直接給予參數(shù)調(diào)用:obj.methodName("實參1",實參2(int))
 
反射:
//獲取類的描述對象
Type t = obj.GetType();
//取得方法描述對象
MethodInfo mi = t.GetMethod("show");
//調(diào)用方法
mi.Invoke(obj, "實參1",實參2(int));
參數(shù)可以換成數(shù)組

反射載入程序集

System.Reflection.Assembly類
    Assembly類可以獲得程序集的信息,也可以動態(tài)的加載程序集,以及在程序集中查找類型信息,并創(chuàng)建該類型的實例。
   使用Assembly類可以降低程序集之間的耦合,有利于軟件結(jié)構(gòu)的合理化。
   
   通過程序集名稱返回Assembly對象
       Assembly ass = Assembly.Load("ClassLibrary831");
   通過DLL文件名稱返回Assembly對象
       Assembly ass = Assembly.LoadFrom("ClassLibrary831.dll");
   通過Assembly獲取程序集中類
       Type t = ass.GetType("ClassLibrary831.NewClass");   //參數(shù)必須是類的全名
   通過Assembly獲取程序集中所有的類
       Type[] t = ass.GetTypes();
      
   //通過程序集的名稱反射
   Assembly ass = Assembly.Load("ClassLibrary831");
   Type t = ass.GetType("ClassLibrary831.NewClass");
   object o = Activator.CreateInstance(t, "", "");
   MethodInfo mi = t.GetMethod("show");
   mi.Invoke(o, null);
  //通過DLL文件全名反射其中的所有類型
   Assembly assembly = Assembly.LoadFrom("xxx.dll的路徑");
   Type[] aa = a.GetTypes();
   foreach(Type t in aa)
   {
       if(t.FullName == "a.b.c")
       {
           object o = Activator.CreateInstance(t);
       }
   }
主站蜘蛛池模板: 欧美日韩中文国产一区二区三区 | 在线播放葵千惠激烈潮催 | 久久久久久久久亚洲 | 人人妻人人澡人人爽人人dvd | 一级黄色小视频 | 爆乳女仆高潮在线观看 | 18禁裸男晨勃露j毛免费观看 | 在线看亚洲十八禁网站 | 又大又粗又爽18禁免费看 | 青青青青青手机视频在线观看视频 | 成人综合伊人五月婷久久 | 久久夜色精品国产飘飘 | 在线观看一区二区精品视频 | 欧美 丝袜 自拍 制服 另类 | 日韩欧美亚洲一区 | 男女啪啪激烈高潮喷出gif免费 | 伊人婷婷综合缴情亚洲五月 | 好爽…又高潮了毛片免费看 | av无码小缝喷白浆在线观看 | 香蕉521av网站永久地址 | 日韩免费高清视频网站 | 久久黄色免费视频 | 老司机日日摸夜夜摸精品影院 | 粉嫩00福利视频在线精品 | 国产免国产免‘费 | 视频一区国产 | 又色又爽又黄高潮的免费视频 | 久色腾| 亚洲+自拍+色综合图区一 | 3d动漫精品啪啪一区二区下载 | 亚洲性爰视频 | 野花香社区在线视频观看播放 | 欧美一进一出抽搐大尺度视频 | 日本强伦姧熟睡人妻完整视频 | 欧美日韩国产深夜福利视频 | 麻豆福利在线观看 | 精品九九人人做人人爱 | 久久九九精品99国产精品 | 最新中文乱码字字幕在线 | 亚洲精品麻豆 | 一区二区免费看 |