为什么在c#中使用动态类型?

起初我想的是:

var aName=getAllSomethings(); 

是非常难以理解的,因此我会在没有混淆的空间时使用动态类型,例如:

 AClassName aName = new AClassName(); 

这里,

 var aName=new AClassName(); 

似乎可读。 但是,我( 这里 )读到动态类型也会带来性能代价。
我尝试阅读该链接中的所有其他post,以了解我应该在哪里使用动态类型,但是甚至没有提出一个很好的理由。 我应该等待,直到我告诉自己 – “这只能用动态打字来解决”? 或者是否有更好(实际)的理由使用它?

谢谢。

编辑:我的错误( – :将尽快关闭此问题。

var不是动态类型。 只是aName的类型是由编译器推断的。

您的示例仍然完全静态类型,并且没有性能损失。 您的代码被编译成与显式类型名称完全相同的IL。

现在在C#4中,动态类型确实存在,但它将被写为:

 dynamic aName = new AClassName(); 

我个人认为动态类型在C#4中相对来说很少有用 – 基本上当你处理已经动态知道的数据时,例如reflection或导航XML。

这不是动态类型。 var声明在编译时已知的静态类型,它绝对等同于声明类型名称。 编译器将推断出类型并将其替换为生成的程序集。

使用var关键字不是动态类型。 var关键字由编译器处理。 变量根据对变量的第一次赋值进行静态类型化。

类型:

  var value = new StringBuilder(); 

是StringBuilder。 没有办法改变那种类型(这是动态类型允许的)。

Jon Skeet在他的博客中指的是dynamic关键字。 那是另一头野兽。

那不是动态类型。 动态类型是通过“动态”类型(奇怪的是)。 使用var根本没有开销,它是一种编码速记,仍然会产生强类型变量。

你是错误的,为什么动态打字是。

“var”使用Type Inference在编译时推导出变量的类型。 它的机制相当简单,绝对没有性能影响。 用“var”声明的变量仍然只能是一个精确类型(或该类型的派生)。

动态变量允许变量在运行时保存任何类型,并仍然对该对象执行操作,就好像我们知道支持什么。 这些调用中的每一个都使运行时执行检查以查看实际是否支持方法调用。 这是动态类型具有运行时开销的部分原因。

正如其他人提到的那样,’var’关键字不会给我们动态输入。 在编译时推断出类型。

当我认为它有意义时,我使用var; 也就是说,当类型明显时,它会减少声明的冗长:

 var someDict = new Dictionary(); 

代替…

 Dictionary() someDict = new Dictionary(); 

但是,在您的示例中:

 var aName=getAllSomethings(); 

我不会使用’var’,因为你已经注意到了,然后你必须检查’getAllSomethings()’的返回类型(C#BTW的错误命名风格)才能知道’aName’是什么,这只是使代码可读性降低。