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

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

我有自己的2-3个自定义模型类。 例如,客户,员工和产品。 现在我在一个字符串中有类名。 并且基于字符串中的类名,我必须创建它的对象并返回到VIEW。 我怎么能实现这个目标?

我知道IF ELSE声明的一个选项,但我想尝试更好的“ 动态 ”方式……

在string中使用类名不足以创建其实例。 事实上,您将需要包含类名的完整命名空间来创建对象。

假设您有以下内容:

 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。 将类名传递给GetType并创建新实例。

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

 public class ClassInstance { public string StringData { get; set; } } 

此致,Nik

Activator类在.net中完成这项工作,这种技术对dependency injection类型的场景非常有用。

 string NameSpace = "ProjectName.YourNameSpace"; string ProbeClass = "CLassName"; ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle; ClassName Prober = ProberHandle.Unwrap() as ClassName; 

确保在进行类型转换之前解包 ,否则会出现转换错误。