我已经阅读了大量关于c# v4附带的新关键字的文章,但我无法区分“dynamic”和“var”之间的区别。
这篇文章让我思考了一下,但我还是看不出有什么不同。
你是否只能将“var”用作局部变量,但同时用作局部变量和全局变量?
你能显示一些代码没有动态关键字,然后显示相同的代码与动态关键字吗?
我已经阅读了大量关于c# v4附带的新关键字的文章,但我无法区分“dynamic”和“var”之间的区别。
这篇文章让我思考了一下,但我还是看不出有什么不同。
你是否只能将“var”用作局部变量,但同时用作局部变量和全局变量?
你能显示一些代码没有动态关键字,然后显示相同的代码与动态关键字吗?
当前回答
Var只是普通类型声明的简写,让编译器猜测正确的类型。
Dynamic是一种新的(静态)类型,其中所有检查都在运行时完成,而不是由编译器完成。
其他回答
我会解释dynamic和var的区别。
dynamic d1;
d1 = 1;
d1 = "http://mycodelogic.com";
这是可行的。编译器可以重新创建动态变量的类型。 首先,它创建类型为整数,然后编译器将重新创建类型为字符串,但在var的情况下
var v1; // Compiler will throw error because we have to initialized at the time of declaration
var v2 = 1; // Compiler will create v1 as **integer**
v2 = "Suneel Gupta"; // Compiler will throw error because, compiler will not recreate the type of variable
When using the ‘var’ keyword, the type is decided by the compiler at compile time, whereas when using the ‘dynamic’ keyword, the type is decided by the runtime. ‘var’ keyword, a strongly implicitly typed local variable for which the compiler is able to determine the type from the initialization expression - very useful when doing LINQ programming. Compiler doesn't have any information about the dynamic type of variable. so compiler will not show any intelligence .compiler has all information about the stored value of var type so compiler will show intelligence.dynamic type can be passed as function argument and function also can return object typeButvar type can not be passed as function argument and function can not return object type. This type of variable can work in the scope where it defined.
下面是一个简单的例子,演示了动态(4.0)和Var之间的差异
dynamic di = 20;
dynamic ds = "sadlfk";
var vi = 10;
var vsTemp= "sdklf";
Console.WriteLine(di.GetType().ToString()); //Prints System.Int32
Console.WriteLine(ds.GetType().ToString()); //Prints System.String
Console.WriteLine(vi.GetType().ToString()); //Prints System.Int32
Console.WriteLine(vsTemp.GetType().ToString()); //Prints System.String
**ds = 12;** //ds is treated as string until this stmt now assigning integer.
Console.WriteLine(ds.GetType().ToString()); **//Prints System.Int32**
**vs = 12**; //*Gives compile time error* - Here is the difference between Var and Dynamic. var is compile time bound variable.
湿婆Mamidi
一个很大的不同——你可以有一个动态返回类型。
dynamic Foo(int x)
{
dynamic result;
if (x < 5)
result = x;
else
result = x.ToString();
return result;
}
Var只是普通类型声明的简写,让编译器猜测正确的类型。
Dynamic是一种新的(静态)类型,其中所有检查都在运行时完成,而不是由编译器完成。
用var声明的变量的类型是由编译器决定的,它是指定类型名称的快捷方式,仅此而已。
然而动态是在运行时确定的,编译器不知道实际的类型,所有对该变量的方法/字段/属性访问都将在运行时计算出来。