獲取程序集方法1:
Assembly ass1 = Assembly.Load("InterfaceAndPolymorphism");//參數:程序集的長格式,就是右鍵 中的 程序集名稱
獲取程序集方法2:
Assembly ass2 = Assembly.LoadFile(System.IO.Directory.GetCurrentDirectory() + "\\InterfaceAndPolymorphism.exe");//參數:文件的路徑,加上文件名,注意加擴展名(這里是.exe)
獲取程序集方法3:
Assembly ass3 = Assembly.LoadFrom("InterfaceAndPolymorphism.exe");//參數:程序集的文件,跟上面方法2的區別就是上面方法2的可以放在任意的位置
完整代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //【1】引入反射的命名空間 using System.Reflection; namespace xiketang.com4 { /// <summary> /// 反射測試 /// </summary> public class TestReflection { public void Test() { #region 獲取程序集 //獲取程序集的常用的3個方法,一般都是用第一種方法 Assembly ass1 = Assembly.Load("InterfaceAndPolymorphism");//參數:程序集的長格式,就是右鍵 中的 程序集名稱 Assembly ass2 = Assembly.LoadFile(System.IO.Directory.GetCurrentDirectory() + "\\InterfaceAndPolymorphism.exe");//參數:文件的路徑,加上文件名,注意加擴展名(這里是.exe) Assembly ass3 = Assembly.LoadFrom("InterfaceAndPolymorphism.exe");//參數:程序集的文件,跟上面方法2的區別就是上面方法2的可以放在任意的位置 #endregion #region 觀察程序集給我們的信息 //觀察程序集給我們的信息 Type[] types = ass1.GetTypes();//獲取程序集中自定義的類型 foreach (var item in types) { //item.Name:類的名稱 --》 Dean //item:類的完全限定名(命名空間+類名)--》 xiketang.com4.Dean Console.WriteLine(item.Name + "\t\t" + item); } //我們從一個程序集中,能夠找到所有的類型(類類型、接口類型、泛型類型......) Console.WriteLine("======================================================"); // 官方解釋:獲取程序集實例中具有指定名稱的 System.Type 對象。 //老師解釋:根據一個類的完全限定名字符串,從程序集中得到這個類的具體類型 Type teacherType = ass1.GetType("xiketang.com4.Teacher"); //參數:類的完全限定名字符串,這個字符串嚴格區分大小寫 //這個Type就是包括了一個類型的所有成員快照 //我們通過一個對象的類型,可以找到類的所有成員,比如我找Teacher的所有屬性 PropertyInfo[] properties = teacherType.GetProperties(); //這些在我們后面自己開發ORM框架時候,非常有用。 #endregion #region 創建對象 //創建Teacher對象方法1 Teacher teacher1 = (Teacher)Activator.CreateInstance(teacherType); // 使用指定類型的默認構造函數來創建該類型的實例。 // public static object CreateInstance(Type type); //創建Teacher對象方法2 Teacher teacher2 = (Teacher)ass1.CreateInstance("xiketang.com4.Teacher"); //上面的內容合並寫 Teacher teacher3 = (Teacher)Assembly.Load("InterfaceAndPolymorphism").CreateInstance("xiketang.com4.Teacher"); #endregion #region 帶參數的構造方法 創建對象 //上面創建對象是無參數的構造防范,下面演示帶參數的構造方法 //通過構造方法創建對象(下面請大家記住方法) object object1 = Activator.CreateInstance(teacherType, new object[] { "常老師" }); object object2 = Activator.CreateInstance(teacherType, new object[] { "常老師", "130000000000000" }); #endregion } } }