如果我写行
,是否有任何性能成本(在类型转换方面等)SqlConnection c = new SqlConnection(connectionString))
as
var c = new SqlConnection(connectionString))
答案 0 :(得分:8)
没有。编译的IL是相同的。
唯一潜在的副作用是在继承的情况下,如果您的变量定义是基类,并且您实例化了一个子类。如果你这样做:
BaseClass item = new DerivedClass();
这可能与以下行为不同:
var item = new DerivedClass();
这是因为第二个编译为:
DerivedClass item = new DerivedClass();
在大多数情况下,它应该表现相同(由于Liskov substitution principle)。但是,如果DerivedClass
使用method hiding,则行为可能会发生变化。
答案 1 :(得分:1)
没有。编译器在编译时知道var
应该是什么(new SqlConnection
的返回实际上是SqlConnection
。当编译器知道右侧的类型时,您可以使用{ {1}}。
这没有运行时性能影响
答案 2 :(得分:0)
我相信var是在编译时处理的,所以它只是编写代码的快捷方式。这意味着编译版本是相同的。