var, object, dynamic的区别以及使用

    阅读目录:

    一. 为什么是它们三个

    二. 能够任意赋值的原因

    三. dynamic的用法

    四. 使用dynamic的注意事项

拿这三者比较的原因是它们在使用的时候非常相似。你可以用它

们声明的变量赋任何类型的值。

看看下面的示例:
var a = 1;
object b = 1;
dynamic c = 1; 上面的例子中,看起来三者非常相似,但是背后的原理却是非常 不同。 var是C# 3中引入的,其实它仅仅只是一个语法. var本身并不是 一种类型, 其它两者object和dynamic是类型。 var声明的变量在赋值的那一刻,就已经决定了它是什么类型。 所以如果你这样使用,就会有编译错误: var a = 1;
a = "Test"; object之所以能够被赋值为任意类型的原因,其实都知道,因为 所有的类型都派生自object. 所以它可以赋值为任何类型: object a = 1;
a = "Test"; dynamic不是在编译时候确定实际类型的, 而是在运行时。 所以下面的代码是能够通过编译的,但是会在运行时报错: dynamic a = "test";
a++; 三. dynamic的用法
1 直接使用该类型,可以非常方便的插入属性, 方法
dynamic person = new System.Dynamic.ExpandoObject();
person.id = 1;
person.title = "贵源网络";
person.url = "gzmsg.com";
person.co = "软件开发";
person.des = new Func<string>(() => person.title + person.url);
Response.Write(person.des());//结果:贵源网络gzmsg.com 2 枚举所有成员
foreach (var property in (IDictionary<String, Object>) person)
{
Response.Write(property.Key + ": " + property.Value);
//结果:id: 1title: 贵源网络url: gzmsg.comco: 软件开发 des: System.Func`1[System.String]
} 3 简化反射
常用的处理反射的例子: object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember( "Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
int sum = Convert.ToInt32(res); 使用dynamic之后: dynamic calc = GetCalculator();
int sum = calc.Add(10, 20); 四,使用dynamic的注意事项 有了dynamic,.net就以及有了动态类型的优势,但是由于对于 dynamic类型的所有操作,都是在运行时确定的,所有错误无法在 编译时候出现,使用的时候,就需要非常小心。 因为dynamic是类型,所以如果函数接受的是确定类型的参数,是 不能传入dynamic类型的,这样会有编译错误。比如:
复制代码 public int Add(int a, int b){
return a + b;
}
dynamic test1 = 1;
dynamic test2 = 2;
Add(test1, test2); 复制代码 另外,在我们自己在写函数时,最好不要将dynamic类型作为函数 的参数,这就像是使用object作为函数参数一样,会为程序的维 护带来后续的麻烦。 没有人能够确定使用者传入的是什么,而且编译时候不会有问题 。如果错误出现在运行时,就有可能是灾难。

var, object, dynamic的区别以及使用的更多相关文章

  1. var, object, dynamic的区别以及使用(转载)

    var, object, dynamic的区别以及使用 阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 拿这三者比较的原因 ...

  2. var, object, dynamic的区别以及dynamic的使用

    var, object, dynamic的区别以及dynamic的使用 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用 2013-06- ...

  3. 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

    阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...

  4. var object dynamic的区别

    一.var var本身不是一种类型,只是一种语法糖:var声明的变量在赋值的时候即已决定其变量类型,编译时会进行校验. 二.object object是所以类型的基类,故可以赋任何类型的值. 三.dy ...

  5. [转]理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

    阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...

  6. 【C# 基础概念】C# 4 dynamic - var, object, dynamic的区别以及dynamic的使用

    阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...

  7. Var与Dynamic的区别

    1.var与dynamic的区别   C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,但其实它们是有本质的区别的.var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的 ...

  8. 简述C#中关键字var和dynamic的区别

    C#中关键字var和dynamic的区别如下: 1.var申明的变量必须初始化,dynamic申明的变量无需初始化. 2.var关键字只能在方法内部申明局部变量,dynamic关键字可用于局部变量,字 ...

  9. var和dynamic的区别及如何正确使用dynamic ?

    C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,他们都可以申明动态类型的变量,但是本质上他们还是有不少区别的.var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的值, ...

随机推荐

  1. 哈希小demo hashCode取模

    package demo; import java.util.ArrayList; import java.util.List; class Person { private String usern ...

  2. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

    spring boot 2.X集成ES 进行CRUD操作  完整版 内容包括: ============================================================ ...

  3. 在Activity中使用Thread导致的内存泄漏

    https://github.com/bboyfeiyu/android-tech-frontier/tree/master/issue-7/%E5%9C%A8Activity%E4%B8%AD%E4 ...

  4. Unity3D 中鼠标按下时OnMouseDown()、Input.GetMouseButtonDown()和EventType.MouseDown的响应验证

    初学unity3D,对于其中的事件响应不是很清楚,于是写了下面的代码来验证: 1.新建.cs文件,名为testMouse.cs: using UnityEngine; using System.Col ...

  5. SharePoint Online 切换经典视图

    SharePoint online 默认是现代视图,我们可以通过Powershell命令切换默认视图. 以下,是完成的Powershell命令: # This file uses CSOM. Repl ...

  6. hdu 2049 不easy系列之(4)——考新郎

    不easy系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. 修改服务的运行权限,解决SVN Post Commit问题

    先来看一下错误现象 之前在Windows Server中安装了VirtualSVN Server,然后设置了Post Commit Hooks,在提交代码到版本库之后,将代码check到本地的一个Se ...

  8. OHEM

    样本不平衡问题 如在二分类中正负样本比例存在较大差距,导致模型的预测偏向某一类别.如果正样本占据1%,而负样本占据99%,那么模型只需要对所有样本输出预测为负样本,那么模型轻松可以达到99%的正确率. ...

  9. PHP: Short URL Algorithm Implementation

    1.http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/ The following code is wri ...

  10. HttpAsyncClient的连接池使用

    代码示例 public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new D ...