有什么区别:C#对象实例化
Object o = new Object();
o.foo();
和
new Object().foo();
(假设我不需要参考之后)?
是否有任何理由使用一个而不是另一个(例如内存使用情况)?
有什么区别:C#对象实例化
Object o = new Object();
o.foo();
和
new Object().foo();
(假设我不需要参考之后)?
是否有任何理由使用一个而不是另一个(例如内存使用情况)?
在执行方面没有任何区别。
有可以在调试方面的差异:
foo()
之前被称为NullReferenceException
s,如果在同一语句中有多个解除引用操作可能会非常棘手)。我绝对不说,你应该总是拆东西展现出来 - 只是它可以是用于调试。
如果以后不需要实例,则没有区别。
如果你不需要o
后缀,那么没有区别。 (JIT)编译器可能将它们视为相同。
所以这是一个品味问题。在这种情况下,我对第一个样本略有偏好,但有时第二个样本的流畅符号更具可读性。
没有区别。
要探测它,你可以编译两个代码(发布模式),用ildasm检查它们,你会看到生成的字节代码是相同的。
编辑:实际上,我有时会发现更容易调试时声明变量。更容易检查,因此更容易调试。
编辑:删除不正确的代码
不同的是,在第一种情况下,你可以看到在调试器创建的对象。
您可以重复使用它。 – Femaref 2010-04-28 12:00:22
@Femaref:什么? – user1112111 2010-04-28 12:04:04
@Daniel Rose:实际上这不会编译,应该为拥有'foo'方法的类创建一个类,但是谢谢你的答案 – user1112111 2010-04-28 12:04:59
Skeet先生,你再次击中! – user1112111 2010-04-28 12:12:40
另一个区别是 - 一旦声明 - 你不能在同一个范围内再次使用变量名o。可能是一个有争议的问题,但仍然存在差异。 – Jono 2010-04-28 12:29:12
@Jono,认为范围你真的是指声明空间。 http://blogs.msdn.com/ericlippert/archive/2009/08/03/what-s-the-difference-part-two-scope-vs-declaration-space-vs-lifetime.aspx – Fede 2010-04-28 12:57:08