创建具有其字符串变量名称的类的对象实例(Create object instance of a cl

2019-07-21 18:41发布

我不知道我问的东西是可用的,但我只是想知道,如果它存在,它是如何工作的。 因此,这里是我的问题:

我有2-3定制模型类我自己的。 例如,客户,员工和产品。 现在我有一个字符串类的名称。 基于类名的字符串来了,我要创建的对象,并返回到一个视图。 我怎么能做到这一点?

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

Answer 1:

具有串类名是不够的,能够创建它的实例。 作为事实上,你需要完整的命名空间,包括类名来创建一个对象。

假设你有以下几点:

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

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

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

或这个:

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

希望这可以帮助,请让我知道如果没有。



Answer 2:

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

这样做的作品..

问候阿维



Answer 3:

最简单的方法是使用激活。 通过类名的GetType和创建新实例。

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

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

问候,尼克



Answer 4:

Activator类确实在.NET中这个工作,这种技术依赖注入样的场景非常有用。

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

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

确保你的类型转换之前解开否则会给转换错误。



文章来源: Create object instance of a class having its name in string variable