C#中对象实例化之间的差异:在引用中存储对象与直接调用方法

时间:2014-05-07 10:36:17

标签: c# syntax objectinstantiation

我对c#中的对象声明有疑问。我用这个例子来解释 我可以这样做:

MyObject obj = New MyObject(); 
int a = obj.getInt();

或者我可以这样做

int a = new MyObject().getInt();

结果是一样的,但是,这些声明之间是否存在任何差异? (没有语法)

感谢。

3 个答案:

答案 0 :(得分:4)

这不是声明:它是一个类实例化。

没有实际的区别:这完全取决于可读性和你自己的编码风格。

我想补充一点,在这种情况下,您需要声明对某个对象的引用:当这些对象为IDisposable时。

例如:

// WRONG! Underlying stream may still be locked after reading to the end....
new StreamReader(...).ReadToEnd(); 

// OK! Store the whole instance in a reference so you can dispose it when you 
// don't need it anymore.
using(StreamReader r = new StreamReader(...))
{

} // This will call r.Dispose() automatically

正如一些评论所补充的那样,在实例化一个类并将对象存储在引用(变量)中会有很多边缘情况会更好/最优,但关于你的简单示例,我相信差异是不够的,它仍然是编码风格/可读性问题

答案 1 :(得分:3)

主要是语法。

主要区别在于您不能在第二个示例中使用MyObject的实例。此外,它可能会立即被提名为垃圾收集。

答案 2 :(得分:1)

不,从技术上讲它们是一样的。

在这种情况下我唯一建议考虑的事情,就好像函数实际上不需要实例创建一样,你可以考虑将它声明为静态,所以你可以简单地称之为:

int a = MyObject.getInt();

但这自然取决于具体实施。