调用函数而不在C#中创建对象

时间:2011-04-06 09:18:52

标签: c# .net new-operator

以下程序中这两种情况有什么区别吗?

static void Main(string[] args)
{
     //Case 1:
     new Program().a();    

     //Case 2:
     Program p = new Program();
     p.a();
}

void a()
{
     // Do some stuff
}

4 个答案:

答案 0 :(得分:2)

在第一种情况下,您不会将Program对象存储在局部变量中。该函数已执行,但您可以访问调用该操作的对象。

在第二种情况下,将对象存储在局部变量中并再次调用该方法。该方法已执行,您可以稍后再次访问同一对象。

所以这取决于你要做什么。关于执行的方法,没有区别。您必须考虑是否需要在代码中的其他任何位置再次使用Program对象。然后你必须将它存储在一个变量中。否则你可以像在第一种情况下那样做。

答案 1 :(得分:1)

没有。当您致电new Program()时,您正在创建一个对象。 p只是对该对象的引用,它在内存使用或性能方面几乎没有增加任何内容。

在代码的样式和可读性方面,建议避免使用像new Program().a();这样的语句 - 它会使代码更难调试,因为你不能在你想要的语句上放置制动点,并且可以不知道是什么导致了你可能造成的例外。
您还在做什么也不太清楚 - 您可能需要再次阅读以完全理解创建的内容,以及已执行并返回的内容。< / p>

答案 2 :(得分:1)

没有。 (除此之外,后者可能会更方便调试。)

我在这里假设上面的代码是 all 代码。当然,如果您随后使用p执行其他操作,那么您在两者之间做了一些改动: - )。

答案 3 :(得分:0)

只有一个区别(当你在两种情况下都创建一个新对象时) - 在第二个中你仍然可以通过键入类似

的内容来访问它
p.AnotherMethod();

编辑:

如果您不想创建一个对象来调用方法“a”,请将此方法设为 static