在C#中,使用System.Reflection
類可以動態(tài)地創(chuàng)建對象實(shí)例。以下是一個簡單的示例,展示了如何使用反射來創(chuàng)建一個類的實(shí)例:
MyClass
的簡單類:public class MyClass
{
public string Message { get; set; }
public MyClass(string message)
{
Message = message;
}
}
System.Reflection.Assembly
類加載包含該類的程序集。你可以使用Assembly.LoadFrom
方法或Assembly.LoadFile
方法來實(shí)現(xiàn)這一點(diǎn)。這里,我們將使用Assembly.LoadFrom
方法:Assembly assembly = Assembly.LoadFrom("YourAssemblyName"); // 替換為你的程序集名稱
注意:YourAssemblyName
應(yīng)替換為包含MyClass
的程序集的實(shí)際名稱。
3. 使用assembly.GetType()
方法獲取MyClass
類型的Type
對象:
Type myClassType = assembly.GetType("MyNamespace.MyClass"); // 替換為你的命名空間和類名
注意:MyNamespace
應(yīng)替換為包含MyClass
的類的實(shí)際命名空間。
4. 使用Type.GetConstructor()
方法獲取MyClass
的構(gòu)造函數(shù)。你可以根據(jù)需要選擇構(gòu)造函數(shù),這里我們將使用無參數(shù)的構(gòu)造函數(shù):
ConstructorInfo constructor = myClassType.GetConstructor();
ConstructorInfo.Invoke()
方法創(chuàng)建MyClass
的實(shí)例:object instance = constructor.Invoke(null); // 無參數(shù)構(gòu)造函數(shù),因此傳遞null
現(xiàn)在,instance
變量包含了一個MyClass
的實(shí)例。你可以像使用任何其他對象一樣使用它,例如調(diào)用其屬性和方法:
string message = (string)instance.GetType().GetProperty("Message").GetValue(instance);
Console.WriteLine(message);
這將輸出MyClass
實(shí)例的Message
屬性值。