有時候,泛型構(gòu)造需要傳遞參數(shù),但是你加了約束類型new()那就幾乎斷了這條路,所用另辟蹊徑采用Activator.CreateInstance,他會創(chuàng)建最接近的構(gòu)造下面是實驗代碼和實驗成果.
class A {
public Action<int> m_Action;
public A(Action<int> action) {
m_Action = action;
Console.WriteLine("A構(gòu)造完成");
m_Action(5);
}
~A() {
Console.WriteLine("析構(gòu)函數(shù)調(diào)用ok");
}
}
class B:A {
public B(Action<int> action):base(action){
Console.WriteLine("B構(gòu)造完成");
}
}
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的時候發(fā)現(xiàn)了一間非常驚悚的事情,被它創(chuàng)建出來的對象吝梅,即便是停止運行任岸,他也不會被短時間內(nèi)回收栏账,這就非常的可怕了京革。(ps:這個問題查了我一早上L恕!L稀!5昀帧)
被他創(chuàng)建出來的對象需要繼承IDisposable艰躺,關(guān)閉unity的時候自己手動回收,然后告訴GC這里已經(jīng)不需要你來插手了响巢,不然的話描滔,你迅速運行,調(diào)用的就是對象的析構(gòu)函數(shù)W俟拧含长!