C#中的object,var和dynamic关键字有什么区别?

Object

它是所有类型的基础,也是语言最古老的特征之一。这意味着可以将任何类型的值存储在对象类型变量中。但是,检索变量的值以使用原始类型时,必须进行类型转换(拆箱)才能获得原始类型。

Object o;
o = 10;

因此,这是拆箱的额外开销。因此,仅当我们没有关于数据类型的更多信息时,才应首选对象类型。

编译器具有对象类型的标题信息。

Var

这是在.net 3.5框架中引入的。它也可以具有任何类型的值,例如object,但是必须在声明变量时初始化值。该关键字最适合C#中的linq查询。

Var a = 10;
Var b = "string value";
Var c = new Product(); //  产品类型的对象
Var d;//错误,因为在声明变量d时未分配值
d = 10;

dynamic

dynamic关键字是在.net 4.0框架中引入的。它也可以用来存储任何类型的值,例如objectvar,但是与使用变量不同,不需要取消装箱对象。

Dynamic d1 = 10;
Dynamic d2;
D2=new Product();
Dynamic d3="string value";

编译器没有动态类型的信息,但会在运行时评估值。