我不知道我问的东西是可用的,但我只是想知道,如果它存在,它是如何工作的。 因此,这里是我的问题:
我有2-3定制模型类我自己的。 例如,客户,员工和产品。 现在我有一个字符串类的名称。 基于类名的字符串来了,我要创建的对象,并返回到一个视图。 我怎么能做到这一点?
我知道一个选择IF ELSE
语句,但我想尝试一个更好的,“ 动态 ”的方式...
我不知道我问的东西是可用的,但我只是想知道,如果它存在,它是如何工作的。 因此,这里是我的问题:
我有2-3定制模型类我自己的。 例如,客户,员工和产品。 现在我有一个字符串类的名称。 基于类名的字符串来了,我要创建的对象,并返回到一个视图。 我怎么能做到这一点?
我知道一个选择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; }
}
问候,尼克
Activator类确实在.NET中这个工作,这种技术依赖注入样的场景非常有用。
string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";
ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;
确保你的类型转换之前解开否则会给转换错误。