在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举。

使用new关键字

这在.Net中是最常见,也是速度最快的方式:

1 var instance = new Class();

使用System.Activator类的CreateInstance方法动态创建

这里的CreateInstance指的是Activator的非泛型方法:

1 var instance = System.Activator.CreateInstance(typeof(Class));

使用System.Activator类的CreateInstance<T>方法动态创建

这里的CreateInstance才是Activator的泛型方法:

1 var instance = System.Activator.CreateInstance<Class>();

使用泛型约束,使用new关键字创建对象(泛型方法)

首先需要创建一个泛型的方法:

1 public static T CreateInstance<T>() where T : new()2 {3     return new T();4 }

这里利用泛型约束where T: new(),保证了T类型是可以用无参构造器构造的,所以代码里面就可以直接使用new T()来创建对象:

1 var instance = CreateInstance<Class>();

使用泛型类的静态方法、泛型约束和new关键字创建

这里需要首先创建一个泛型类

1 public static class StaticInitializer<T> where T:new()2 {3     public static T CreateInstance()4     {5         return new T();6     }7 }

然后使用如下代码创建实例:

1 var instance = StaticInitializer<Class>.CreateInstance();

使用泛型类的动态方法、泛型约束和new关键字

这里使用的是泛型类的实力方法,需要首先创建一个泛型类:

1 public class DynamicInitializer<T> where T:new()2 {3     public T CreateInstance()4     {5         return new T();6     }7 }

使用的方法就是:

1 var initializer = new DynamicInitializer<Class>();2 var instance = initializer.CreateInstance();

Ok,现在我一共提出了6种不同的创建对象的方式,大家可以猜猜这些创建对象的方式当中那个会比较快。

  1. 使用new关键字
  2. 使用System.Activator类的CreateInstance方法动态创建
  3. 使用System.Activator类的CreateInstance<T>方法动态创建
  4. 使用泛型约束,使用new关键字创建对象(泛型方法)
  5. 使用泛型类的静态方法、泛型约束和new关键字创建
  6. 使用泛型类的动态方法、泛型约束和new关键字

.Net中各种不同的对象创建方式的速度差异的更多相关文章

  1. javascript一种新的对象创建方式-Object.create()

    1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...

  2. 【20190220】JavaScript-知识点整理:对象创建方式、原型、闭包

    一.对象创建方式 1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节.存在的问题是无法通过 instanceof 识别一个对象的类型. function creat ...

  3. 第163天:js面向对象-对象创建方式总结

    面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var obj = {}; //对象有自己的 属性 和 行 ...

  4. Android中得到布局文件对象有三种方式

    Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...

  5. javascript对象创建方式

    工厂模式 在ECMAscript中无法创建类,所以开发人员就发明了一种函数,用函数来封装,以特定接口创建对象的细节,如下面的例子所示: function createPerson(name,age,j ...

  6. Java中String两种不同创建方式的区别及intern的用法

    一, Java有两种创建字符串的方式, String str1 = "abc"; String str2 = new String("abc"); 用双引号创建 ...

  7. Java中类加载过程和对象创建过程

    类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...

  8. java中多线程的两种创建方式

    一丶继承Thread类实现多线程 第一步:继承Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象 , 调用start()方法启动. //线程创建方式一 : /* 第一步:继 ...

  9. JS中遍历数组、对象的方式

    1.标准的for循环遍历数组 //不打印自定义属性和继承属性 var array = [1,2,3]; for (var i = 0; i < array.length; i++) { cons ...

随机推荐

  1. Python调用C# Com dll组件实战

    之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypt ...

  2. Hexo + GitHub Pages搭建博客

    搭建 Node.js 环境 为什么要搭建 Node.js 环境? – 因为 Hexo 博客系统是基于 Node.js 编写的 Node.js 是一个基于 Chrome V8 引擎的 JavaScrip ...

  3. RTKLIB编译及RTCM数据读取样例

    1.RTKLIB简介 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,RTKLIB由日本东京海洋大学( ...

  4. javascript字典数据结构Dictionary实现

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  5. WiFi网络WPA2 KRACK漏洞分析报告

    作者:东帆@阿里安全技术平台团队 --------   0x00 漏洞概述 安全研究员Mathy Vanhoef发现的WPA2协议的KRA(Key Reinstallation Attacks)漏洞, ...

  6. visio移动形状 上下左右键 移动滚动条

    今天在用visio写作业,想微移visio的形状,于是按上下左右方向键,结果移动的是滚动条. 那么如何让visio按上下左右移动的是形状,其实按Scroll键就好了.

  7. 系统讲解CSS,前端开发最神奇的技术,新手的你一定不能错过

    前面小编带领大家重温了前端开发中最基本的HTML语言.如果你已经掌握了这门语言,那么恭喜你,可以去深入了解CSS技术了.CSS技术最主要的功能就是弥补HTML标记对在页面中显示外观的不足,对这些标记对 ...

  8. Node.js之异步流控制

    前言 在没有深度使用函数回调的经验的时候,去看这些内容还是有一点吃力的.由于Node.js独特的异步特性,才出现了"回调地狱"的问题,这篇文章中,我比较详细的记录了如何解决异步流问 ...

  9. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  10. 【UML 建模】活动图介绍

    1.活动图,即Activity Diagram,是UML中用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一种活动到另一种活动的控制流.其本质上是一种流程图,着重表现从一个活动到另一个 ...