定义变量时“ var”和“ object”有什么区别?

时间:2019-03-29 09:49:22

标签: c# .net types

我看到“ var”和“ object”这两个关键字都被用作定义变量的“空白卡”。

经过一番研究,我发现var是让编译器决定数据将采用哪种类型,而object本身就是一种类型,它充当数据的“根”。所有其他类型。

所以我的问题不是它们在理论上有什么区别,而是在实践上。

在哪种情况下可以使用它们?不直接设置实际类型的好处是什么?

使用它们有没有限制?

2 个答案:

答案 0 :(得分:5)

使用object的优势很少-尤其是,它实际上消除了编译器所有关于类型的知识或利用类型的API 的能力-并且在对于值类型(struct),它将引入“装箱”。但是:准确地在您想删除所有编译器有关类型的知识时可以使用。例如,因为您要调用接受object的特定重载,而不是采用类型重载或通用重载。或者,如果您要调用采用object多个 API,则您的类型为值类型,并且您想确保仅将其装箱一次而不是每次通话。一个典型的例子可能是在使用反射API时。

另一种用法是当本地可能需要具有不同类型的值时-可能是因为稍后它被重新分配了不同的值。一种非常罕见的情况,但是存在。

通常,除非有充分的理由使用var,否则您应该非常选择object

答案 1 :(得分:5)

我不建议过多使用object。当您想让变量为任何类型或者在编译时不知道它将是哪种类型时,通常使用它。此外,在使用object时,您可以将任何对象分配给该变量(我的意思是任何类型)。编译器会将该变量视为object,您将无法对其进行任何处理(除非您将其强制转换为特定类型)。对我来说,不鼓励在不需要时使用它。

使用var时有所不同。对我来说,这只是语法糖,它使您可以省略声明变量的类型,而将其留给编译器来解决。但是它仍然是特定类型的强类型变量(由编译器猜测),因此您将无法像使用object那样向其分配任何对象。反过来,您将获得方法,可以调用特定类型的对象(无需强制转换)。