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

本文关键字:字符串 对象 实例化 如果 | 更新日期: 2024-10-21 23:05:45

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

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

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

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

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

以下是我在如何从字符串实例化类方面找到的最直接的解决方案: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);
    }
}

干杯!