2015-03-06 3 views
0

В C#, как создать экземпляр объекта для класса; ? Но имя класса в строковой переменной **В C#, если известно имя класса (string), как создать экземпляр объекта из этого класса (string)?

String stringNameOfClass = "SomeClass"; 
{stringNameOfClass} theObject = new {stringNameOfClass}(); 

В JS, я думаю, мы могли бы использовать Eval()

var stringNameOfClass = "SomeClass"; 
eval('var theInstance = new ' + stringNameOfClass + '()'); 
theInstance.accessMethod(); 

[EDIT] Дано: имя Классы неизвестны Но известны методы

Я могу получить все имена классов в данной папке. Теперь я хочу создать экземпляр каждого из них соответственно своим пространством имен. Хотя, я знаю, что метод я заинтересован.

arrayOfString = getAllClassesByNamespace('TheNamespace','/path'); 
// now call testMe() per instance 
foreach (string str in arrayOfString) 
{ 
{str} arrayOfString[str] = new {str}; 
str.testMe(); 
//in js 
eval('var obj_' + arrayOfString[str] + ' = new ' + arrayOfString[str] + '()'); 
//if first class found is TheClass.. this is what I want to do 
TheClass obj_TheClass = new TheClass(); 
obj_TheClass.testMe(); 
} 
+7

Что вы _actually_ пытаетесь сделать? В большинстве случаев вопросы, связанные с «литой строкой в ​​класс», это [проблемы XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), и на них часто можно ответить: используйте 'Словарь ' (вместо очевидного подхода к анализу). –

+5

Я предполагаю, что вы после ['Activator.CreateInstance'] (https://msdn.microsoft.com/en-us/library/system.activator.createinstance%28v=vs.110%29.aspx), но важно, чтобы C#, вероятно, имел лучший способ делать то, что вы пытаетесь сделать. Чего вы пытаетесь достичь? – Sayse

+3

Возможный дубликат [C# экземпляр класса из строки] (http://stackoverflow.com/q/2247598/50447) –

ответ

1

Вот наиболее прямо вперед решение, которое я нашел в том, как создать экземпляр класса из строки: https://msdn.microsoft.com/en-us/library/a89hcwhh.aspx

public class TestMethodInfo 
{ 
    public static void Main() 
    { 
     // Get the constructor and create an instance of MagicClass 

     String stringedClass = "MagicClass"; 
     String stringedClassMethod = "theMethod"; 
     Type magicType = Type.GetType(stringedClass); 
     ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes); 
     object magicClassObject = magicConstructor.Invoke(new object[]{}); 

     // Get the ItsMagic method and invoke with a parameter value of 100 

     MethodInfo magicMethod = magicType.GetMethod(stringedClassMethod); 
     object magicValue = magicMethod.Invoke(magicClassObject, new object[]{100}); 

     Console.WriteLine("MethodInfo.Invoke() Example\n"); 
     Console.WriteLine("MagicClass.theMethod() returned: {0}", magicValue); 
    } 
} 

Ура!

1

Я думаю, что вы ищете метод Activator.CreateInstance, это будет иметь целый ряд параметров, но есть один, который будет принимать TypeName и пространство имен позволяя вам создать экземпляр нового класса из его имени.

https://msdn.microsoft.com/en-us/library/d133hta4(v=vs.110).aspx

+0

Привет, В моем примере я ожидаю: TheClass obj_TheClass = new TheClass(); obj_TheClass.testMe(); Я считаю, что Activator.CreateInstance нуждается в типе броска, но, как вы видите, у меня есть unkown, я не могу TheObject = (Uknown) Activator.CreateInstance ..... – TyrHunter

+0

Все классы реализуют интерфейс или наследуют от базы класс? Если это так, вы можете применить к этому. 'MyBaseClass obj = (MyBaseClass) Activator.CreateInstance (...)' –

+0

Да, но кастинг не будет работать, так как тогда мне придется обращаться к методам производных классов, которые я не уверен, если это возможно – TyrHunter

Смежные вопросы