簡體   English   中英

如何獲得給定字符串名稱的類和屬性

[英]How to get class and property given string name

我試圖從類中獲取對象(在我的情況下為TabPage),但類名以字符串形式給出。 我在下面做了一個基本示例,說明了我想要得到的結果。 我嘗試使用反射,可以獲取PropertyInfo,但是如何獲取實際對象。

public Form1()
{

    string TabName = "Car";
    InitializeComponent();
    /*
 * Need the ability to get Class from string Name then get ConfigurationTab from that class
 * PropertyInfo[] propertyInfo = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Name == TabName).FirstOrDefault().GetProperties();
 */
}

public class Car
{

    public TabPage _Tab;
    public TabPage ConfigurationTab { get { return _Tab; } }
    public Car()
    {
        _Tab = new TabPage("Car");
        _Tab.BackColor = Color.Red;
    }
}

public class Truck
{

    public TabPage _Tab;
    public TabPage ConfigurationTab { get { return _Tab; } }
    public Truck()
    {
        _Tab = new TabPage("Truck");
        _Tab.BackColor = Color.Blue;
    }
}

我嘗試了以下代碼:

Car car = new Car();
TabPage tp = (TabPage)propertyInfo[0].GetValue(car, null);

它確實可以工作,但想法是該類是未知的,並且由字符串給出。

您可以這樣做:

 object obj = Activator.CreateInstance(Type.GetType("Car")));

但是,由於您的CarTruck類不共享公共類或接口,因此您只能將object用作obj的類型,除非您對類型進行了區分等等。但這是沒有意義的,並且不能讓您動態創建。

要解決,有多種方法,但是這里有一個簡單的方法,請使用通用的基類:

public class Base    //<--- use a better name than that... lol
{

    protected TabPage _Tab;   

    public TabPage ConfigurationTab { get { return _Tab; } }

    public Base() {}

}

現在擴展轎車和卡車的基類:

public class Car : Base
{

   public Car()
   {
      _Tab = new TabPage("Car");
      _Tab.BackColor = Color.Red;
    }
}

public class Truck : Base
{

   public Truck()
   {
       _Tab = new TabPage("Truck");
       _Tab.BackColor = Color.Blue;
   }
}

現在更改您的激活器:

Base base = (Base) Activator.CreateInstance(Type.GetType("<TheClassToCreate>")));

暫無
暫無

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

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