使用显式返回int的Main方法的目的

时间:2017-01-11 14:39:56

标签: c# oop

在C#中,您可以为主方法使用4种不同的方法签名:

static void Main(string[] args) {}

static int Main(string[] args) { return 0; }

static void Main () {}

static int Main {return 0;}

在进一步研究Main时,引用指出,即使您构造一个原型返回void的Main()方法,也会自动返回值0。

这就是说,为什么你会使用一个Main方法,如果无论如何都会返回一个int签名?我知道返回保存在名为%ERRORLEVEL%的变量中,并且您可以使用批处理文件捕获此代码。我只是对于始终提供的返回值感到好奇。感谢。

3 个答案:

答案 0 :(得分:1)

如果你依赖于返回0的void语法,那么你的程序只会返回一个0,这是一个成功执行的状态代码。对于许多用例,这可能没问题,但是允许main方法显式返回int的意思是你可以在不同的情况下返回不同的 int。对于非平凡的应用程序,如果在有意义的上下文中手动返回不同的int值,那么除了在所有终止方案中盲目地返回0之外,您将从该功能中获得更多的价值。

此外,您似乎在询问为什么如果两者都返回一个整数,您应该明确地说static int Main而不是static void Main。除了上面关于返回有意义的值的注释之外,更广泛地说,如果你希望你的方法返回一个整数,那么利用显式语法而不是依赖回退行为是有意义的,因为这样做对于修改或使用您的程序的其他人来说,后者可能是未知的或不直观的。以另一种方式查看您的问题 - 如果您希望main方法返回int,为什么不会您使用语法明确地这样做? void方法返回int是否有意义?

答案 1 :(得分:1)

他们称之为Exit codes

这是你的程序返回的状态或执行代码。这些天它有点遗留,但一般来说它是让调用者了解执行的方式。

零通常意味着成功执行。

正如代码中的函数向其调用者返回一个值,您的程序也应该向其调用者返回一个值,如脚本或操作系统。

返回代码是过去的遗留物,但在某些情况下仍然使用,例如控制台应用程序,因为它简单易用。

为什么要使用一个而不是另一个?

如果您无意返回错误代码,C#已经添加了允许void的语法糖,因此您不需要考虑返回任何内容。在大多数情况下,这很好。

但是,如果您正在开发一个控制台应用程序,并且您希望让调用者处理代码中的任何结果,则返回代码是一种简单且标准化的方法。

static int Main(string[] args) { return 0; } // Everything went fine

static int Main(string[] args) { return -1; } // An error occured.

static int Main(string[] args) { return 2; } // Program completed, with warnings.

static void Main(string[] args) {  } // Just returns zero.

代码的含义取决于每个程序,并将记录在文档或类似文档中。

See this answer for how it can be used in bat files:

示例.bat文件

@echo off
myprogram.exe
if errorlevel 1 (
   echo Failure Reason Given is %errorlevel%
   exit /b %errorlevel%
)

答案 2 :(得分:-2)

返回值是errorlevel,您可以在batchfiles中使用errorlevel。