以下程序中这两种情况有什么区别吗?
static void Main(string[] args)
{
//Case 1:
new Program().a();
//Case 2:
Program p = new Program();
p.a();
}
void a()
{
// Do some stuff
}
答案 0 :(得分:2)
在第一种情况下,您不会将Program对象存储在局部变量中。该函数已执行,但您可以访问调用该操作的对象。
在第二种情况下,将对象存储在局部变量中并再次调用该方法。该方法已执行,您可以稍后再次访问同一对象。
所以这取决于你要做什么。关于执行的方法,没有区别。您必须考虑是否需要在代码中的其他任何位置再次使用Program对象。然后你必须将它存储在一个变量中。否则你可以像在第一种情况下那样做。
答案 1 :(得分:1)
没有。当您致电new Program()
时,您正在创建一个对象。 p
只是对该对象的引用,它在内存使用或性能方面几乎没有增加任何内容。
在代码的样式和可读性方面,建议避免使用像new Program().a();
这样的语句 - 它会使代码更难调试,因为你不能在你想要的语句上放置制动点,并且可以不知道是什么导致了你可能造成的例外。
您还在做什么也不太清楚 - 您可能需要再次阅读以完全理解创建的内容,以及已执行并返回的内容。< / p>
答案 2 :(得分:1)
没有。 (除此之外,后者可能会更方便调试。)
我在这里假设上面的代码是 all 代码。当然,如果您随后使用p
执行其他操作,那么您在两者之间做了一些改动: - )。
答案 3 :(得分:0)
只有一个区别(当你在两种情况下都创建一个新对象时) - 在第二个中你仍然可以通过键入类似
的内容来访问它p.AnotherMethod();
编辑:
如果您不想创建一个对象来调用方法“a”,请将此方法设为 static 。