当前位置:  开发笔记 > 编程语言 > 正文

新的"动态"C#4.0关键字是否弃用了'var'关键字?

如何解决《新的"动态"C#4.0关键字是否弃用了'var'关键字?》经验,为你挑选了2个好方法。

当C#4.0出来时,我们有动态关键字,如Anders Hejlsberg在这个优秀的演示文稿中所描述的那样(C#的发展速度超过了我能跟上的速度......我没有太多时间熟悉var关键字)

我还需要var关键字吗?var有什么可以做的......动态不能吗?

var x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x

dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x

Jon Skeet.. 72

不,他们非常不同.

var 表示"在编译时推断变量的类型" - 但它仍然完全静态绑定.

dynamic表示"假设我可以使用此变量执行任何操作" - 即编译器不知道可用的操作,并且DLR将确定调用在执行时的真正含义.

我希望dynamic很少使用- 只有当我真正想要动态行为时:

var 让你在编译时捕获拼写错误等

静态绑定代码总是比动态绑定代码运行得更快(即使差异变得相当小)

静态绑定代码提供了更多的编译时支持,而不仅仅是错误:您可以找到调用层次结构,重构将更好地工作,Intellisense可用等


JaredPar.. 17

Dynamic和var代表两种完全不同的想法.

VAR

Var基本上要求编译器根据赋值语句右侧的表达式计算变量的类型.然后对该变量进行处理,就像将其显式声明为表达式的类型一样.例如,以下两个语句是等效的

var a = "foo";
string a = "foo";

这里带走的关键是"var"是100%类型安全的并且是编译时操作

动态

动态在很多方面与var完全相反.使用dynamic基本上消除了特定变量的所有类型安全性.它有很多种方式没有类型.在变量上调用方法或字段时,将在运行时确定如何调用该字段.例如

dynamic d = SomeOperation();
d.Foo(); // Will this fail or not?  Won't know until you run the program

这里带走的关键是"动态"不是类型安全的并且是运行时操作



1> Jon Skeet..:

不,他们非常不同.

var 表示"在编译时推断变量的类型" - 但它仍然完全静态绑定.

dynamic表示"假设我可以使用此变量执行任何操作" - 即编译器不知道可用的操作,并且DLR将确定调用在执行时的真正含义.

我希望dynamic很少使用- 只有当我真正想要动态行为时:

var 让你在编译时捕获拼写错误等

静态绑定代码总是比动态绑定代码运行得更快(即使差异变得相当小)

静态绑定代码提供了更多的编译时支持,而不仅仅是错误:您可以找到调用层次结构,重构将更好地工作,Intellisense可用等



2> JaredPar..:

Dynamic和var代表两种完全不同的想法.

VAR

Var基本上要求编译器根据赋值语句右侧的表达式计算变量的类型.然后对该变量进行处理,就像将其显式声明为表达式的类型一样.例如,以下两个语句是等效的

var a = "foo";
string a = "foo";

这里带走的关键是"var"是100%类型安全的并且是编译时操作

动态

动态在很多方面与var完全相反.使用dynamic基本上消除了特定变量的所有类型安全性.它有很多种方式没有类型.在变量上调用方法或字段时,将在运行时确定如何调用该字段.例如

dynamic d = SomeOperation();
d.Foo(); // Will this fail or not?  Won't know until you run the program

这里带走的关键是"动态"不是类型安全的并且是运行时操作


它仍然是类型安全的,只是在编译时不知道类型.如果实际(运行时)对象没有您尝试访问的特定成员,则会出现异常.
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有