Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,如果(字符串)类名已知,如何从该(字符串)类实例化对象?_C# - Fatal编程技术网

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

在C#中,如果(字符串)类名已知,如何从该(字符串)类实例化对象?,c#,C#,在C#中,如何针对类实例化对象;但是类名在字符串变量中** String stringNameOfClass = "SomeClass"; {stringNameOfClass} theObject = new {stringNameOfClass}(); 在js中,我认为我们可以使用eval() [编辑] 鉴于: 类名未知 但是方法是已知的 我可以在给定的文件夹中获取所有类的名称。 现在我想根据它们的名称空间相应地实例化它们中的每一个。 不过,我知道我感兴趣的方法 arrayOfString

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

String stringNameOfClass = "SomeClass";
{stringNameOfClass} theObject = new {stringNameOfClass}();
在js中,我认为我们可以使用eval()

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

我可以在给定的文件夹中获取所有类的名称。 现在我想根据它们的名称空间相应地实例化它们中的每一个。 不过,我知道我感兴趣的方法

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

我认为您正在寻找Activator.CreateInstance方法,这将需要许多参数,但有一个参数将需要一个TypeName和命名空间,允许您从它的名称创建一个新类的实例


以下是我在如何从字符串实例化类中找到的最直接的解决方案:


干杯

你到底想做什么?在大多数情况下,关于“将字符串转换为类”的问题通常可以用以下方法来回答:使用
字典
(而不是明显的反射方法)。我猜你是在追求,但重要的是C#可能有更好的方法来做你想做的事情。您想实现什么?类的可能副本是未知的,那么我将如何进行声明<代码>UNKOWNclass对象=UNKOWNclass();var stringNameOfClassUNKNOWN=“SomeClass”;eval('var theInstance=new'+stringNameOfClassUNKNOWN+'()');instance.accessMethod()但为什么它是未知的?很明显,您希望无论它是什么类,都有一个名为
accessMethod
的方法,因此,如果这是在多个类中实现的,那么它可能只是您需要的一个接口。在我的示例中,我希望:类obj_TheClass=newtheclass();对象类testMe();我相信Activator.CreateInstance需要一个强制类型,但正如您所看到的,我有一个未知的类型,我不能对象=(Uknown)Activator.CreateInstance…..所有的类都实现了接口还是从基类继承?如果是这样,你可以投那个
MyBaseClass obj=(MyBaseClass)Activator.CreateInstance(…)
Yes,但是强制转换将不起作用,因为我将不得不访问派生类方法,我不确定这是否可行
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();
}
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);
    }
}