泛型构造传递参数实验

有时候,泛型构造需要传递参数,但是你加了约束类型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这里已经不需要你来插手了,不然的话,你迅速运行,调用的就是对象的析构函数!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [TOC] 内存管理 一、托管堆基础 在面向对象中,每个类型代表一种可使用的资源,要使用该资源,必须为代表资源的类...
    _秦同学_阅读 9,359评论 0 3
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 5,381评论 0 4
  • 内存溢出和内存泄漏的区别 内存溢出:out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,...
    Aimerwhy阅读 4,057评论 0 1
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,057评论 0 4
  • 它是用于目标检测的特征描述器,用来计算局部图像方向信息的统计值。 HOG描述器最重要的思想: 在一副图像中,局部目...
    苌文清阅读 3,904评论 0 0