概述
? ? ?程序運行時,通過反射可以得到其它程序集或者自己程序集代碼的各種信息,包括類、函數、變量等來實例化它們,執行它們,操作它們,實際上就是獲取程序在內存中的映像,然后基于這個映像進行各種操作。
Activator用法介紹
Activator用于實例化對象的類,通過type獲取類型后,可以通過它實例化對象.?Activator.CreateInstance默認調用無參構造函數。
實例:先定義一個學生類型:
public class Student{public Student(){Name = "zls";Age = 18;id = 20;}public Student(string name,int age){Name = name;Age = age;id = 21;}public string Name { get; set; }public int Age { get; set; }public int id;public int Score(int a,int b ){return a + b;}}
1、無參數構造函數:?使用指定類型的默認構造函數來創建該類型的實例。
函數原型
public static object CreateInstance(Type type);
Type type = typeof(Student);Student test = Activator.CreateInstance(type) as Student;Console.WriteLine(test.id);
2. 有參數構造函數:使用與指定參數匹配程度最高的構造函數創建指定類型的實例。函數原型:
public static object CreateInstance(Type type, params object[] args);
test = Activator.CreateInstance(type, "zyr", 19) as Student;Console.WriteLine(test.id);
運行結果:
當然創建實例有很多重載,System.Activator類中提供了三組靜態方法來創建類型的實例,每組方法均提供多個重載,適用不同的場景。個別重載方法返回ObjectHandle對象,需要unwrap后才能獲取對象實例。如:CreateInstanceFrom :使用指定的程序集文件和與指定參數匹配程度最高的構造函數來創建指定名稱的類型的實例。
用法舉例:
string t = "TestDll.Person";string assemblyPath = @"C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll";var personHandle = Activator.CreateInstanceFrom(assemblyPath, t);var person = (Person)personHandle.Unwrap();Console.WriteLine(person.Score(5,6));
運行結果:11