2013-03-16 93 views
19

我不知道我问的东西是否可用,但我只想知道它是否存在以及它是如何工作的。所以这里是我的问题:在字符串变量中创建其名称的类的对象实例

我有2-3我自己的自定义模型类。例如,客户, 员工和产品。现在我有一个字符串中的类名。并根据 这个类名进入一个字符串,我不得不创建它的对象,并且返回一个VIEW为 。我怎么能做到这一点?

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

+0

你所寻找的是反射,但作为一般规则,如果你使用的是反射,你可能会做错事(有你需要反思的情况,但并不常见)。 – 2013-03-16 13:29:16

回答

39

具有串类名是不够的,能够创建它的实例。 事实上,您将需要包含类名的完整名称空间来创建对象。

假设你具备以下条件:

string className = "MyClass"; 
string namespaceName = "MyNamespace.MyInternalNamespace"; 

比你可以创建一个类的实例,使用以下任一技术MyNamespace.MyInternalNamespace.MyClass类的对象:

var myObj = Activator.CreateInstance(namespaceName, className); 

或这样的:

var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className)); 

希望这有助于,请让我知道如果没有。

+0

我有一个字符串中的类名。所以基本上我不知道类的类型。那我该如何创建特定类的对象呢?在“MyClass myObj =”我必须给MyClass。 BT可以有任何班级。 – Dhwani 2013-03-18 05:25:29

+0

我做了你想要做的。正如我所提到的除了类名之外,你需要命名空间(作为一个字符串)。把它们放在一起,你就可以按照我的方式创建这个类的实例。我将编辑答案来澄清。感谢您的支持 – 2013-03-18 12:33:41

+4

不应该读取最后一个代码:“var myObj = Activator.CreateInstance(Type.GetType(namespaceName +”。“+ className));” (丢失点?) – JCCyC 2015-03-10 20:35:43

2

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

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

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

问候, 聂

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

这样做的作品..

问候阿维

相关问题