您是否总是为新对象创建变量?

时间:2009-07-22 13:30:13

标签: .net

我常常问自己一个问题,如果你需要在一个对象上调用一个方法,最好使用变量吗?到目前为止,我已经猜到答案是肯定的 - 您的选择是什么,原因是什么?

使用变量:

MyObject mo = new MyObject();
mo.MyMethod();
//mo not used again

没有变量:

new MyObject().MyMethod();

我对.NET特别感兴趣,但如果在其他语言中有任何危险点,我也更愿意预先警告。

7 个答案:

答案 0 :(得分:9)

另一种方法可能是使用静态方法。这样,您就可以避免创建新对象。

public class MyClass
{
  public static int GetSomeInt()
  {
     //do something
  }
}

答案 1 :(得分:7)

不,我经常链接方法调用,特别是使用LINQ:

var query = source.Where(...)
                  .Select(...)
                  .Take(10);

如果要调试中间值,并且解释中间值(通过名称),则额外变量可能很有用,但除此之外,没有实际问题。

答案 2 :(得分:6)

正如您所描述的那样,两种选择之间没有有效的区别。但是如果你经常需要创建一个对象的实例,只需调用一个方法;你应该考虑你的设计是否正确?是否有必要拥有所有这些短命的物体?请记住,对于每个对象分配,垃圾收集器最终必须收集引用。

答案 3 :(得分:4)

你的两个陈述在IL级别几乎完全相同,所以做任何更易读的事情。

答案 4 :(得分:1)

存在技术差异,albiet是次要的...当使用变量时,您告诉编译器在堆栈上创建一个额外的内存插槽,在当前运行的方法的堆栈帧中,保存对(地址)的引用)新创建的对象(除非编译器优化它)

当你通过调用它的成员方法或属性来“链接”新的object()语法时,这个引用不存储在任何地方,因此,(再次,除非编译器优化它),它应该稍微快一点。

答案 5 :(得分:0)

我更喜欢使用变量,它更具可读性。

就我而言,既然你在C ++中要求在堆上分配新变量(使用new),我总是检查NULL指针(在某些情况下检查异常)。

答案 6 :(得分:0)

我也倾向于你的“无变量”摘录,特别是如果不再使用该对象的话。

  • 这会产生更简洁的代码。
  • 由于您正在执行单个功能,因此单行很好。
  • 然而,更大的简洁可能会增加复杂性。

最终,请使用哪种模式为您生成最易理解/可维护的代码。如你所知,每种模式都有利弊。