动态类型var和dynamic和传统确定类型区别和效率

简介: 伴随着vs2010的出现,c#4.0的诞生,与之而来的动态类型dynamic更是给net程序员们锦上添花,为自己的程序书写上带来了给大的便利。可到底怎么用,好不好用,效率这么样,也许是大家最迫切关注的,msdn虽然有简介和使用方法但效率问题才是是否实用的衡量标准和使用前提,本文将为您揭开谜底。

    伴随着vs2010的出现,c#4.0的诞生,与之而来的动态类型dynamic更是给net程序员们锦上添花,为自己的程序书写上带来了给大的便利。可到底怎么用,好不好用,效率这么样,也许是大家最迫切关注的,msdn虽然有简介和使用方法但效率问题才是是否实用的衡量标准和使用前提,本文将为您揭开谜底。

    一、var、dynamic简介。

    二var、dynamic区别。

    三var、dynamic、传统确定类型的效率对比。

一、var、dynamic简介

1.var简介:动态推断类型,net framework 3.5新出的一个定义变量的类型,其实也就是弱化类型的定义,在代码转移时候确定类型。

    msdn参考:[http://msdn.microsoft.com/zh-cn/library/bb383973.aspx]

    百度百科参考:[http://baike.baidu.com/view/407694.htm]

2.dynamic简介:动态类型,net framework 4.0新出的一个定义变量的类型,在代码运行的时候确定类型。

     msdn参考:[http://msdn.microsoft.com/zh-cn/library/dd264741.aspx]

var、dynamic区别。


var、dynamic区别:

    1.var程序编译时确定类型、dynamic程序运行时确定类型。

    2.var 只能定义局部变量;dynamic可定义局部变量和类变量。

    ....

var、dynamic、传统确定类型的效率对比。

    var、dynamic、传统确定强类型究竟谁能称王,成为武林中的霸主,下面通过本人的代码和运行结果已见分晓。

    代码思路,执行同样的操作,给一个StudentInfo类赋值和打印100000次,有计时器查看运行的时间,代码如下:

    

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
 
  
Stopwatch s1 = new Stopwatch();
s1.Start();
for ( int i = 0 ; i < 100000 ; i ++ )
{
var stu
= new StudentInfo();
stu.Name
= " a " ;
stu.Age
= " abc " ;
}
s1.Stop();
Response.Write(
" 1.var动态推断类型: " + s1.ElapsedMilliseconds + " <br /> " );

Stopwatch s2
= new Stopwatch();
s2.Start();
for ( int i = 0 ; i < 100000 ; i ++ )
{
dynamic stu
= new StudentInfo();
stu.Name
= " a " ;
stu.Age
= " abc " ;
}
s2.Stop();
Response.Write(
" 2.dynamic动态类型: " + s2.ElapsedMilliseconds + " <br /> " );

Stopwatch s3
= new Stopwatch();
s3.Start();
for ( int i = 0 ; i < 100000 ; i ++ )
{
StudentInfo stu
= new StudentInfo();
stu.Name
= " a " ;
stu.Age
= " abc " ;
}
s3.Stop();
Response.Write(
" 3.传统确定强类型: " + s3.ElapsedMilliseconds + " <br /> " );

执行结果:img_7d147d0eeebefee9f62785ab9fb9daf4.jpe

多次执行的结论:传统类型 效率 >= var 动态推断类型 > dynamic动态类型 

[原创地址:http://www.cnblogs.com/stone_w/archive/2011/02/17/1957014.html]

img_fa0be433d68c8212b2b0b3b1a564ccb1.png
如果本文对你有所帮助,请打赏——1元就足够感动我:)
支付宝打赏 微信打赏
联系邮箱:intdb@qq.com
我的GitHub: https://github.com/vipstone
关注公众号: img_9bde0f31ac4a0eca10b1bd7414b78faf.png


作者: 王磊
出处: http://vipstone.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,请标明出处。

相关文章
|
2月前
|
编译器 Go 开发者
Go 在编译时评估隐式类型的优点详解
【8月更文挑战第31天】
24 0
|
3月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
49 1
|
5月前
|
编译器 C#
C#.Net筑基-类型系统②常见类型 --record是什么类型?
`record`在C#中是一种创建简单、只读数据结构的方式,常用于轻量级数据传输。它本质上是类(默认)或结构体的快捷形式,包含自动生成的属性、`Equals`、`ToString`、解构赋值等方法。记录类型可以继承其他record或接口,但不继承普通类。支持使用`with`语句创建副本。例如,`public record User(string Name, int Age)`会被编译为包含属性、相等比较和`ToString()`等方法的类。记录类型提供了解构赋值和自定义实现,如密封的`sealed`记录,防止子类重写。
|
5月前
|
C++ 容器
【C++】string类的接口综合运用--1
【C++】string类的接口综合运用--1
|
5月前
|
存储 C语言 C++
【C++】string类的接口综合运用--2
【C++】string类的接口综合运用--2
|
JavaScript 前端开发 API
JavaScript 核心基础(类型、值和变量)
JavaScript 核心基础(类型、值和变量)
|
前端开发 程序员 C#
【C#】通过扩展对象的方式,对字符串等数据类型进行数据进一步处理
在本篇文章中,我们讲一起了解下对象扩展的使用 在实际项目开发中,对象扩展使用的场景还是挺多的,比如:需要对时间值进行再处理,或者字符串中的斜杠(/)转为反斜杠(\)
109 0
ts重点学习103-对象类型得兼容性
ts重点学习103-对象类型得兼容性
67 0
ts重点学习103-对象类型得兼容性
|
存储 Kotlin
【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
145 0