void Start(){System.Activator.CreateInstance<Food>().Eat();}
void Start(){Create<Food>().Eat();}T Create<T>()where T:new (){T t = new T();return t;}

两句代码都能实现同样的效果

实例化一个类的方式
用 New 关键字实例化一个类 New 关键字用于创建对象和调用构造函数。是实例化一个类最常见的方式。

用 Activator 实例化一个类 Activator 用以在本地或从远程创建对象类型,或获取对现有远程对象的引用。其 CreateInstance 方法创建在程序集中定义的类型的实例。

用 Assembly 实例化一个类 Assembly
表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行库应用程序构造块。该类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。

三种实例化一个类的方式的性能比较:

加载程序集的推荐方式是使用 Load 方法。GetType 方法可用于在程序集中搜索特定类型。CreateInstance方法可用于在程序集中搜索和创建类型的实例。

由上图可以看出,用 Activator 实例化一个类最快;其次是用 New 关键字;最慢的是用 Assembly 实例化。Activator
比 用 New 都快。

因此,若想动态实例化一个类,根据你的实际情况,尽量将需要实例化的类放在同一个程序集。

三种实例化一个类的方式的性能比较—船长&CAP

实例化方式的比较 Activator和new相关推荐

  1. Java中各种对象的各种实例化方式

    Java 中万物皆对象,Linux 中一切皆文件 先简单的说下对象的实例化过程: 首先我们要有个意识,就是创建一个类的实例化对象,内存中必须已经加载了这个类 所以,不论是 new 还是反射或是 Uns ...

  2. 几种对象实例化方式详解

    一)对象实例化常用方式 方式一:直接new一个对象,最常用的一种. 方式二:反射,通过Class.forName("类的全限定名"). 方式三:构造器,通过Class.forNam ...

  3. 静态成员内部类和非静态成员内部类的实例化方式

    public class Person { static class Dog { } class Bird{ } public static void main(String[] args) { Pe ...

  4. 详解C#实例化对象的三种方式及性能对比

    前言 做项目过程中有个需求要实例化两万个对象并添加到List 中,这个过程大概需要1min才能加载完(传参较多),于是开启了代码优化之旅,再此记录. 首先想到的是可能实例化比较耗时,于是开始对每种实例 ...

  5. Spring Bean、XML方式Bean配置、Bean实例化配置、Bean注入

    文章目录 Bean管理 一.SpringBoot Bean 初了解 1.1 了解 1.2 Bean的作用域 1.2.1 注意事项 1.3 第三方Bean 二. 基于XML方式Bean的配置 2.1 S ...

  6. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式 1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23);  3.运 ...

  7. 创建(实例化)对象的五种方式

    目录 一.Java中创建(实例化)对象的五种方式 1.new关键字创建对象; 2.调用对象的clone()方法创建对象 3.通过反射对对象进行初始化 4.序列化 5.通过工厂方法返回对象 二.Java ...

  8. WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance

    我们知道WCF有3种典型的对service instance进行实例化的方式,他们分别与WCF的三种InstanceContextMode相匹配,他们分别是PerCall,PerSession和Sin ...

  9. C# Activator

    需要动态的创建一个实例模型的时候,就用Activator.CreateInstance(Type type);如果是明确的知道要创建哪个实例的模型,就可以用 new C#在类工厂中动态创建类的实例,所 ...

最新文章

  1. Eclipse进行可视化的GUI开发3大GUI插件
  2. layui监听当前页_事件监听 · layui使用手册 · 看云
  3. Psscor2 - 微软内部的SOS升级版(知道.net3.5)
  4. socket入门教程
  5. arcLength函数
  6. 单步调试时遇到cout和cin会自动跳到ostream文件中的解决方案
  7. 归并排序算法 C++
  8. 大数据学习(06)-- 云数据库
  9. 超Mask RCNN速度4倍,仅在单个GPU训练的实时实例分割算法
  10. 自定义http报头_浅谈http协议(三):HTTP 报文及其结构
  11. “在 GitHub 用十年攒的 54k+ Star,一个误操全没了”
  12. 通过代码学 Sutton 强化学习:SARSA、Q-Learning 时序差分算法训练 CartPole
  13. php获取xml中的数据格式_php-从xml文件获取数据
  14. 今天晴儿和老佛爷又一起上台了
  15. LeetCode 150. 逆波兰表达式求值(Evaluate Reverse Polish Notation) 24
  16. 不动点迭代法的收敛阶
  17. lambda的peek(流元素操作),filter(过滤),map(映射),limit(截断),skip(跳过),collect,distinct(去重)函数使用
  18. A记录 CNAME记录是什么 | DNS 查询的过程 | DNS 根服务器是什么 | 配置域名 CNAME 原理
  19. nginx集群与高并发
  20. 精容数安政务云灾备解决方案

热门文章

  1. openeuler 欧拉操作系统的几个图形界面安装方法
  2. 无线蓝牙手表FCC ID认证测试项目有哪些?
  3. MyBatis源码的学习(9)---映射器mappers的的XML解析
  4. CST视图view的操作
  5. Python 医学知识图谱问答系统(一),建立医学知识图谱,基于neo4j知识图谱的医学问答体系
  6. Google 认证之GMS 认证
  7. Five-degree-of-freedom manipulation of an untethered magnetic device in fluid using a single permane
  8. pt100转4-20mA,一转一/二转二热电阻温度变送器
  9. NAACL2022信息抽取论文分类
  10. AndroidStudio使用之仿微信首页界面