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

本文关键字:创建 对象 实例 字符串 变量 | 更新日期: 2023-09-27 18:04:07

我不知道这是否可能,但我想知道它是否可行,如果是,它是如何工作的。所以这是我的问题:

我有 2-3 个自己的自定义模型类。例如,CustomerEmployeeProduct.我在字符串中也有一个类名。根据类名,我想创建一个实例并将其返回到视图。我怎样才能做到这一点?

我知道一种选择是if/else声明,但我想要一种更好、更动态的方式。

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

将类名放在字符串中不足以创建其实例。事实上,您将需要完整的命名空间,包括类名来创建对象。

假设您有以下条件:

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

这确实有效..

问候阿维

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

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

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

问候尼克

激活

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

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

确保在类型转换之前解开包装,否则将出现转换错误。