c# - C# 中的动态与 var

标签 c# visual-studio-2010 .net-4.0

<分区>

Possible Duplicate:
What’s the difference between dynamic(C# 4) and var?

.NET 4.0 (VS 2010) 中的 dynamic 和 var 关键字有什么区别。根据 MSDN,动态的定义是 - 动态查找允许您编写方法、运算符和索引器调用、属性和字段访问,甚至绕过 C# 的正常静态绑定(bind)并动态解析的对象调用.

而 var 的定义是 - 隐式类型的局部变量是强类型的,就像您自己声明类型一样,但编译器确定类型

这在下面的代码上下文中有何不同:

var a1 = new A();
a1.Foo(1);

dynamic a2 = new A();
a2.Foo(1);

最佳答案

var 表示推断出 static 类型 - 在您的情况下,它完全等同于

A a1 = new A();

所有绑定(bind)仍然完全静态完成。如果您查看生成的代码,它将与上述声明完全相同。

dynamic 意味着所有使用 a2 的表达式都在执行时绑定(bind),而不是在编译时绑定(bind),因此它可以动态运行。编译器不会检查 Foo 方法是否存在 - 行为是在执行时确定的。事实上,如果对象实现了 IDynamicMetaObjectProvider,它可以在执行时决定如何处理调用,响应任何方法调用(或其他类型的使用)——换句话说,根本不必有一个名为 Foo 的“真实”方法。

如果您在动态情况下查看生成的代码,您会发现与调用站点和绑定(bind)器有关的各种奇怪而奇妙的东西。

关于c# - C# 中的动态与 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920790/

相关文章:

c# - 任务 LongRunning 的副作用?

c# - 更改自定义 ComboBox 样式中的 ItemsPresenter 以显示彼此相邻的项目

c# - 处理asp.net页面中的多个表单标签?

.net - 我应该从哪里引用 Microsoft.ManagementConsole.dll?

c# - 在 Windows 窗体应用程序中突出显示按钮

linq-to-sql - SQLMetal 多个外键指向一张表问题

c# - 将不同图片格式(jpg、gif、png等)转换为TIFF格式

c# - 通过对静态类的反射设置属性

winforms - 特殊文件夹 "Common Application Data Folder"在我的设置项目中不可用。为什么?

multithreading - 如何实现可取消的工作线程