我常常问自己一个问题,如果你需要在一个对象上调用一个方法,最好使用变量吗?到目前为止,我已经猜到答案是肯定的 - 您的选择是什么,原因是什么?
使用变量:
MyObject mo = new MyObject();
mo.MyMethod();
//mo not used again
没有变量:
new MyObject().MyMethod();
我对.NET特别感兴趣,但如果在其他语言中有任何危险点,我也更愿意预先警告。
答案 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)
我也倾向于你的“无变量”摘录,特别是如果不再使用该对象的话。
最终,请使用哪种模式为您生成最易理解/可维护的代码。如你所知,每种模式都有利弊。