6

如果我只需要实例化一个类来调用它的单个方法然后完成它,我喜欢像这样在一行中完成它,

string result = new MyClass().GetResult();

而不是做类似的事情,

var myClass = new MyClass();
string result = myClass.GetResult();

据我了解,在内存分配和后续清理方面,同样的事情也在幕后发生。真的是这样还​​是有区别?如果是这样,一个比另一个更有效吗?

编辑:

像你们中的许多人建议的那样,将方法设为静态是一个很好的解决方案。我正在使用其他人创建的类,我目前无法重构或更改。那么对于这种情况,inline 实例化还是单独行实例化有什么区别呢?

编辑:

这个问题的答案是否因班级维护的资源数量而异(来自 Blam & BenCr 下面的评论)?

4

3 回答 3

4

使用单线实际上应该更有效,因为运行时少了一个局部变量来跟踪垃圾收集。 编辑:不正确,请参阅下面亚当的回复。我原来的观点仍然成立,强硬,影响(如果有的话)应该可以忽略不计。

但真正的问题是:为什么 GetResult() 不是静态函数?这将完全避免整个实例化。

于 2012-12-05T16:18:06.920 回答
3

我在C# 编码约定中看不到有关您的问题的任何内容。

我个人的偏好是你给出的后一个例子。我认为它可以提高代码的可读性。

但是,如果您实例化一个类只是为了从中获取一个值,那么重新考虑该类的设计方式可能会更好。您的 GetResult() 方法可能应该是静态的?

于 2012-12-05T16:18:48.573 回答
0

这仅适用于类实现 IDisposable 的情况。
如果您正在寻找有效使用单一方法并完成它,那么两者都不是。
MyClass() 在超出范围之前不会被释放。

using (myClass = new MyClass()) 
{
    string result = myClass.GetResult();
}

using 语句(C# 参考)

考虑静态方法和类

静态类和静态类成员(C# 编程指南)

垃圾收集是一个广泛的话题。
您说这不是您的代码,但如果您编写包含资源的代码,这里有一些指导。

IDisposable 接口

于 2012-12-05T16:16:27.747 回答