我不知道这是否可能,但我想知道它是否可行,如果是,它是如何工作的。所以这是我的问题:
我有 2-3 个自己的自定义模型类。例如,Customer
, Employee
和Product
.我在字符串中也有一个类名。根据类名,我想创建一个实例并将其返回到视图。我怎样才能做到这一点?
我知道一种选择是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;
确保在类型转换之前解开包装,否则将出现转换错误。