Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Reflection_Runtime_System.reflection - Fatal编程技术网

C# 创建名称在字符串变量中的类的对象实例

C# 创建名称在字符串变量中的类的对象实例,c#,.net,reflection,runtime,system.reflection,C#,.net,Reflection,Runtime,System.reflection,我不知道我要的东西是否可用,但我只想知道它是否存在以及它是如何工作的。所以我的问题是: 我有自己的2-3个自定义模型类。比如说客户,, 员工和产品。现在我有了一个字符串中的类名。基于 类名以字符串形式出现,我必须创建它的对象和 返回到视图。我怎样才能做到这一点 我知道一个选项是IF-ELSE语句,但我想尝试一个更好的,Dynamic“方法…最简单的方法是使用Activator。将类名传递给GetType并创建新实例 ClassInstance s1=(ClassInstance)Activato

我不知道我要的东西是否可用,但我只想知道它是否存在以及它是如何工作的。所以我的问题是:

我有自己的2-3个自定义模型类。比如说客户,,
员工和产品。现在我有了一个字符串中的类名。基于 类名以字符串形式出现,我必须创建它的对象和 返回到视图。我怎样才能做到这一点


我知道一个选项是
IF-ELSE
语句,但我想尝试一个更好的,Dynamic“方法…

最简单的方法是使用Activator。将类名传递给GetType并创建新实例

ClassInstance s1=(ClassInstance)Activator.CreateInstance(Type.GetType(“App.ClassInstance”);

问候,,
Nik

使用字符串形式的类名不足以创建其实例。 事实上,创建对象需要完整的名称空间,包括类名

假设您具备以下条件:

string className = "MyClass";
string namespaceName = "MyNamespace.MyInternalNamespace";
然后,您可以使用以下技术之一创建该类的实例,即类
MyNamespace.MyInternalNamespace.MyClass
的对象:

var myObj = Activator.CreateInstance(namespaceName, className);
或者这个:

var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className));
希望这有帮助,如果没有请告诉我

    string frmName = "frmCustomer";
    //WorldCarUI. is the namespace of the form
    Type CAType = Type.GetType("WorldCarUI." + frmName );
    var myObj = Activator.CreateInstance(CAType);
    Form nextForm2 = (Form)myObj;
    nextForm2.Show();
这确实有效


关于Avi,Activator类在.net中完成这项工作,这种技术对于依赖注入类场景非常有用

string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";

ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;

请确保在类型转换之前展开,否则会导致转换错误。

您要查找的是反射,但作为一般规则,如果您使用反射,可能会出错(在某些情况下,您需要反射,但这并不常见)。我有一个字符串中的类名。所以基本上我不知道类类型。那个么我怎样才能创建特定类的对象呢。在“MyClass myObj=”中,我必须给出MyClass。任何课程都可以。我做的正是你想做的。正如我所提到的,除了类名之外,还需要名称空间(作为字符串)。有了它们,您可以按照我所展示的方式创建该类对象的实例。我将编辑答案以澄清。感谢AKSING,最后的代码不应该是:“var myObj=Activator.CreateInstance(Type.GetType(namespaceName+”“+className));”(缺少点?)嘿,请帮助我,我有同样的问题,但这个解决方案对我不起作用,看到了吗
string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";

ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;