使用Var类型的成员

时间:2015-06-07 11:34:44

标签: c# var

在使用var关键字声明隐式类型的对象之后,是否可以使用特定于编译器在任何其他语句中为其分配的类型的成员,方法或属性?

2 个答案:

答案 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只是一个便利功能,因此您无需输入类名或完全限定名称空间。