我看到“ var”和“ object”这两个关键字都被用作定义变量的“空白卡”。
经过一番研究,我发现var
是让编译器决定数据将采用哪种类型,而object
本身就是一种类型,它充当数据的“根”。所有其他类型。
所以我的问题不是它们在理论上有什么区别,而是在实践上。
在哪种情况下可以使用它们?不直接设置实际类型的好处是什么?
使用它们有没有限制?
答案 0 :(得分:5)
使用object
的优势很少-尤其是,它实际上消除了编译器所有关于类型的知识或利用类型的API 的能力-并且在对于值类型(struct
),它将引入“装箱”。但是:准确地在您想删除所有编译器有关类型的知识时可以使用。例如,因为您要调用接受object
的特定重载,而不是采用类型重载或通用重载。或者,如果您要调用采用object
的多个 API,则您的类型为值类型,并且您想确保仅将其装箱一次而不是每次通话。一个典型的例子可能是在使用反射API时。
另一种用法是当本地可能需要具有不同类型的值时-可能是因为稍后它被重新分配了不同的值。一种非常罕见的情况,但是存在。
通常,除非有充分的理由使用var
,否则您应该非常选择object
。
答案 1 :(得分:5)
我不建议过多使用object
。当您想让变量为任何类型或者在编译时不知道它将是哪种类型时,通常使用它。此外,在使用object
时,您可以将任何对象分配给该变量(我的意思是任何类型)。编译器会将该变量视为object
,您将无法对其进行任何处理(除非您将其强制转换为特定类型)。对我来说,不鼓励在不需要时使用它。
使用var
时有所不同。对我来说,这只是语法糖,它使您可以省略声明变量的类型,而将其留给编译器来解决。但是它仍然是特定类型的强类型变量(由编译器猜测),因此您将无法像使用object
那样向其分配任何对象。反过来,您将获得方法,可以调用特定类型的对象(无需强制转换)。