[英]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")));
但是,由於您的Car
和Truck
類不共享公共類或接口,因此您只能將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.