泛型构造传递参数实验

有时候,泛型构造需要传递参数,但是你加了约束类型new()那就几乎断了这条路,所用另辟蹊径采用Activator.CreateInstance,他会创建最接近的构造下面是实验代码和实验成果.

 class A {
        public Action m_Action;
        public A(Action action) {
            m_Action = action;
            Console.WriteLine("A构造完成");
            m_Action(5);
        }
        ~A() {
            Console.WriteLine("析构函数调用ok");
        }
    }
    class B:A {
        public B(Action action):base(action){
            Console.WriteLine("B构造完成");
        }
    }

    class C {
        public static T CreateB(Action 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(action);
        }
    }
输出

在unity使用Activator.CreateInstance的时候发现了一间非常惊悚的事情,被它创建出来的对象,即便是停止运行,他也不会被短时间内回收,这就非常的可怕了。(ps:这个问题查了我一早上!!!!!)
被他创建出来的对象需要继承IDisposable,关闭unity的时候自己手动回收,然后告诉GC这里已经不需要你来插手了,不然的话,你迅速运行,调用的就是对象的析构函数!!

你可能感兴趣的:(泛型构造传递参数实验)