1.需求
需求是这样,要创建一个字典,字典的对象类型有共同的基类,但是不同,这时候需要更加不同的关键字,对应不同的泛型,创建不同的对象。
注:用泛型创建不同的对象,其实有点麻烦,这里其实是把泛型转换成type用反射完成的,其实用反射不适合创建不同的对象,如果真的必须用反射去创建,需要创建不同的创建函数,或者创建没有入参的对象。如果有参数,且有不想多个函数,那只能转换成type去完成。
2.要点
T creatT<T>(object[] o) {
Type type = typeof(T);
T a = (T)type.GetConstructors()[0].Invoke(o);
return a;
}
3.代码
using System;
namespace 用泛型创建对象
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("用泛型创建对象");
Program p = new Program();
p.Main();
Console.ReadKey();
}
private void Main() {
object[] o = { 5 };
A1 t = creatT<A1>(o);
t.fun();
}
T creatT<T>(object[] o) {
Type type = typeof(T);
T a = (T)type.GetConstructors()[0].Invoke(o);
return a;
}
}
abstract class A {
protected int index;
public A(int index) {
this.index = index;
}
public abstract void fun();
}
class A1 : A
{
public A1(int index) : base(index) { }
public override void fun()
{
Console.WriteLine("A1 index:" + index);
}
}
class A2 : A
{
public A2(int index) : base(index) { }
public override void fun()
{
Console.WriteLine("A2 index:" + index);
}
}
}
4.运行结果
用泛型创建对象
A1 index:5