2014-04-01 2 views
0

클래스 (내 경우에는 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); 

을하며 작업을 수행하지만 아이디어는 알려진 문자열에 의해 제공되지 않는 클래스입니다.

답변

1

이 작업을 수행 할 수 있습니다 : 당신의 CarTruck 클래스는 일반적인 클래스 또는 인터페이스를 공유하지 않기 때문에 당신이 유형 등을 맡았다하지 않는

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

그러나 당신은 단지 obj의 유형으로 object을 사용할 수 있습니다 ... 그러나 그것은 무의미하며 역동적 인 창조를 얻지 못할 것입니다.

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; 
    } 
} 

변화

가 여러 가지 방법이 있지만 여기에 공통 기본 클래스를 사용하여 간단한 하나입니다 해결하기 당신의 Activator :

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

여기 제가 시도한 바가 있습니다 : object obj = Activator.CreateInstance (Type.GetTy pe ("Test.Form1 +"+ TabName)); 그러나이 점에 유의하면 내 경우에 "Car"라는 개체가 나에게 제공됩니다. TabPage에 액세스해야합니다. 객체를 사용하여 수행 할 수 없습니다. Car & Truck에서 상속 할 수있는 인터페이스를 추가하면 어떻게해야합니까? –

+0

내 대답에 추가됩니다 ... –

+0

내가 게시 한 시도하십시오. –

관련 문제