我目前正在我的一个应用程序中使用它来创建一个类
public static IMobileAdapter CreateAdapter(Type AdapterType)
{
return (IMobileAdapter)System.Activator.CreateInstance(AdapterType);
}
Run Code Online (Sandbox Code Playgroud)
它返回一个实现IMobileAdapter的类的实例,但您可以使用字符串轻松地使用它:
public static IMyClassInterface CreateClass(string MyClassType)
{
return (IMyClassInterface)System.Activator.CreateInstance(Type.GetType(MyClassType));
}
Run Code Online (Sandbox Code Playgroud)
使用类似于以下内容的代码调用它:
IMyClassInterface myInst = CreateClass("MyNamespace.MyClass, MyAssembly");
Run Code Online (Sandbox Code Playgroud)
当然,它创建的类在这种情况下必须实现接口IMyClassInterface,但是对于类工厂,您可能会让所有类实现相同的接口.
编辑:
在参考您的评论时,出于本讨论的目的,将术语"程序集"视为您的vb/cs项目中的文件集.我假设你在一个项目[汇编]中完成所有这一切,而不是分散在多个项目中.
在你的情况下,你的类将扩展Form对象,你会做这样的事情.
Form myInst = CreateClass("MyExtendedForm");
Run Code Online (Sandbox Code Playgroud)
要么
Form myInst = CreateClass(Type.GetType("MyExtendedForm"));
Run Code Online (Sandbox Code Playgroud)
取决于您是在CreateClass方法中获取类型还是在其外部获取类型.您需要将实例强制转换为正确的类型才能访问任何自定义成员.考虑一下:
class MyCustomForm : Form
{
public int myCustomField{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个自定义表单,扩展了Form添加myCustomField属性.我想使用Activator.CreateInstance()实例化它:
public static Form CreateClass(string InstanceName)
{
return (Form)System.Activator.CreateInstance(Type.GetType(InstanceName));
}
Run Code Online (Sandbox Code Playgroud)
然后我用它来调用它:
Form myInst = CreateClass("MyCustomForm");
Run Code Online (Sandbox Code Playgroud)
所以现在我将自定义表单存储在myInst中.但是,要访问自定义属性[myCustomField],您需要将实例强制转换为正确的形式:
int someVal = ((Type.GetType("MyCustomForm"))myInst).myCustomField;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |