在使用var
关键字声明隐式类型的对象之后,是否可以使用特定于编译器在任何其他语句中为其分配的类型的成员,方法或属性?
答案 0 :(得分:6)
是的,绝对的 - 因为var
实际上不是一种类型。它只是告诉编译器:“我不会显式地告诉你类型 - 只需使用赋值运算符的右侧操作数的编译时类型来计算变量的类型是“
例如:
var text = "this is a string";
Console.WriteLine(text.Length); // Uses string.Length property
除了方便之外,还引入了var
来启用匿名类型,其中无法明确声明变量类型。例如:
// The type involved has no name that we can refer to, so we *have* to use var.
var item = new { Name = "Jon", Hobby = "Stack Overflow" };
Console.WriteLine(item.Name); // This is still resolved at compile-time.
将此与dynamic
进行比较,其中编译器基本上推迟使用成员直到执行时间,以基于执行时类型绑定它们:
dynamic foo = "this is a string";
Console.WriteLine(foo.Length); // Resolves to string.Length at execution time
foo = new int[10]; // This wouldn't be valid with var; an int[] isn't a string
Console.WriteLine(foo.Length); // Resolves to int[].Length at execution time
foo.ThisWillGoBang(); // Compiles, but will throw an exception
答案 1 :(得分:2)
如果使用var
,则必须立即初始化变量。例如:
var a = 1;
这告诉编译器它是一个int。但是如果你没有初始化,那么编译器就不知道它应该使用什么类型。
var b;
b
是什么类型的?
同样适用于班级成员。
var
只是一个便利功能,因此您无需输入类名或完全限定名称空间。