如何 建立 Type的实例??
我现在知道,除了泛型方法可以动态建立一个对象的实例,如:
private void NewMDIForm<T>(ref T fVar) where T:Form,new()
{
if (fVar == null)
{
fVar = new T(); //这样T就是一个动态的类型了!
fVar.MdiParent = this;
}
fVar.Show();
}
上面的方法可以动态建立一个字窗体并显示出来.
但现在我要一个窗体的构造函数实现类似的动态建立对象的功能.可是发现窗体的构造函数好象不能使用泛型...
于是,想到:
public MyForm(Type t)
{
FMyobj=....; //想在这里使用t来建立t指定的对象. 可能吗?
}
不知道上面的想法可行否?请高手指点一下.
------解决方案--------------------反射...
------解决方案--------------------object objInfo = RuntimeHelpers.GetObjectValue(Activator.CreateInstance(type));
------解决方案--------------------LZ可以参考下
构造泛型类型的实例
1.获取表示泛型类型的 Type 对象。下面的代码以两种不同方式获取泛型类型 Dictionary:一种方法使用 System.Type.GetType(System.String) 方法重载和描述类型的字符串,另一种方法调用构造类型 Dictionary<String, Example>(在 Visual Basic 中为 Dictionary(Of String, Example))的 GetGenericTypeDefinition 方法。MakeGenericType 方法需要泛型类型定义。
Type d1 = typeof(Dictionary<,>);
Dictionary<string, Example> d2 = new Dictionary<string, Example>();
Type d3 = d2.GetType();
Type d4 = d3.GetGenericTypeDefinition();
2.构造一组用于替换类型参数的类型变量。数组必须包含正确数目的 Type 对象,并且顺序和对象在类型参数列表中的顺序相同。在这种情况下,键(第一个类型参数)的类型为 String,字典中的值是名为 Example 的类的实例。
Type[] typeArgs = {typeof(string), typeof(Example)};
3.调用 MakeGenericType 方法将类型变量绑定到类型参数,然后构造类型。
Type constructed = d1.MakeGenericType(typeArgs);
4.使用 CreateInstance 方法重载来创建构造类型的对象。下面的代码在生成的 Dictionary<String, Example> 对象中存储 Example 类的两个实例。
object o = Activator.CreateInstance(constructed);
------解决方案--------------------Activator.CreateInstance(t, new object[] {3});
这个也可以的