繁体   English   中英

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

[英]Diferences between object instantiation in C#: storing objects in references vs. calling a method directly

我对C#中的对象声明有疑问。 我用这个例子解释我可以做到这一点:

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

或者我可以做到这一点

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

结果是相同的,但是这些声明之间是否存在任何区别? (没有语法)

谢谢。

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

两者之间没有实际的区别:都是关于可读性和您自己的编码风格的。

我要补充一点,在少数情况下,您需要声明对某个对象的引用:这些对象是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

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

主要是语法。

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

不,从技术上讲,它们是相同的。

在这种情况下,我建议考虑的唯一事情是,好像该函数实际上不需要实例创建一样,您可以考虑将其声明为静态,因此可以像下面这样简单地调用它:

int a = MyObject.getInt();

但这自然取决于具体的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM