在C#中,如果(字符串)类名已知,如何从该(字符串)类实例化对象?

时间:2015-03-06 08:54:13

标签: c#

在C#中,如何针对类实例化​​对象;但是类名是字符串变量?**

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

在js中,我认为我们可以使用eval()

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

[编辑] 鉴于: 类名称未知 但方法是已知的

我可以在给定的文件夹中获取所有类名。 现在我想通过它们的命名空间相应地实例化它们。 虽然,我知道我感兴趣的方法。

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

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找Activator.CreateInstance方法,这将采用许多参数,但有一个将采用TypeName和Namespace允许您从其名称创建新类的实例。

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

答案 1 :(得分: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);
    }
}

干杯!