簡體   English   中英

如何使用反射動態實例化一個類型?

[英]How to instantiate a type dynamically using reflection?

我需要使用反射動態地實例化一個C#類型。 這是我的場景:我正在編寫一個基類,它需要將某個對象實例化為其初始化的一部分。 基類不知道它應該實例化的對象類型,但派生類將會。 所以,我希望派生類在base()調用中將類型傳遞給基類。 代碼看起來像這樣:

public abstract class MyBaseClass
{
    protected MyBaseClass(Type myType)
    {
         // Instantiate object of type passed in 
         /* This is the part I'm trying to figure out */
    }
}

public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass() : base(typeof(Whatever))
    {
    }
}

換句話說,基類委托其派生類型選擇要實例化的對象類型。

有人可以幫忙嗎?

試試Activator.CreateInstance(Type)

http://msdn.microsoft.com/en-us/library/wccyzw83.aspx

您正在尋找Activator.CreateInstance

object instance = Activator.CreateInstance(myType);

此方法有各種重載,可以使用構造函數參數或其他信息來查找類型(例如字符串形式的名稱)

您可能希望使用泛型:

public abstract class MyBaseClass<T> where T : new()
{
    protected MyBaseClass()
    {
        T myObj = new T();
         // Instantiate object of type passed in 
         /* This is the part I'm trying to figure out */
    }
}

public class MyDerivedClass : MyBaseClass<Whatever>
{
    public MyDerivedClass() 
    {
    }
}

需要where T : new()來支持new T()構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM