Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中调用函数而不创建对象#_C#_.net_New Operator - Fatal编程技术网

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

C# 在C中调用函数而不创建对象#,c#,.net,new-operator,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 } 在第一种情况下,不将程序对象存储在局部变量中。该函数已执行,但您可以再访问调用该操作的对象 在第二种情况下,

在下面的程序中,这两种情况有什么不同吗

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

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

void a()
{
     // Do some stuff
}

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

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


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

否。当您调用
新程序()
时,您正在创建一个对象
p
只是对该对象的引用,它在内存使用或性能方面几乎没有任何增加

就代码的风格和可读性而言,建议避免使用诸如
newprogram().a()之类的语句-这使代码更难调试,因为您无法在所需语句上放置制动点,也无法判断是什么原因导致了可能导致的异常。
你在做什么也不太清楚——你可能需要再读一遍,才能完全理解创建了什么,执行了什么,返回了什么。

否(除此之外,后者可能更便于调试)


我在这里假设上面的代码就是所有的代码。当然,如果您随后使用
p
执行其他操作,那么您已经在这两者之间做出了区别:-)。

只有一个区别(当您在两种情况下创建新对象时)-在第二个区别中,您仍然可以通过键入以下内容来访问它

p.AnotherMethod();
编辑:


如果您不想创建一个调用方法“a”的对象,请将此方法设置为静态的(这是
new
所做的)。我不明白这个问题。吹毛求疵:p是一个参考。C#中有实际的指针,但事实并非如此。@Martinho-我接受这个。“指针”可能更容易辨认。谢谢