獲取程序集方法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
}
}
}
