有时候,泛型构造需要传递参数,但是你加了约束类型new()那就几乎断了这条路,所用另辟蹊径采用Activator.CreateInstance,他会创建最接近的构造下面是实验代码和实验成果.
class A {
public Action<int> m_Action;
public A(Action<int> action) {
m_Action = action;
Console.WriteLine("A构造完成");
m_Action(5);
}
~A() {
Console.WriteLine("析构函数调用ok");
}
}
class B:A {
public B(Action<int> action):base(action){
Console.WriteLine("B构造完成");
}
}
class C {
public static T CreateB<T>(Action<int> action) where T:A{
T request = null;
request = (T)Activator.CreateInstance(typeof(T), action);
return request;
}
}
class Program {
static void action(int a) {
Console.WriteLine(a + a);
}
static void Main(string[] args) {
C.CreateB<B>(action);
}
}
在unity使用Activator.CreateInstance的时候发现了一间非常惊悚的事情,被它创建出来的对象,即便是停止运行,他也不会被短时间内回收,这就非常的可怕了。(ps:这个问题查了我一早上!!!!!)
被他创建出来的对象需要继承IDisposable,关闭unity的时候自己手动回收,然后告诉GC这里已经不需要你来插手了,不然的话,你迅速运行,调用的就是对象的析构函数!!