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

标签 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 时,该引用文献指出,即使您构造一个原型(prototype)为返回 void 的 Main() 方法,也会自动返回值 0。

话虽如此,如果无论如何都会返回的话,为什么要使用签名返回 int 的 Main 方法呢?据我了解,返回值保存在名为 %ERRORLEVEL% 的变量中,并且您可以使用批处理文件捕获此代码,我只是对始终提供的返回值感到好奇。谢谢。

最佳答案

它们被称为退出代码

它是程序返回的状态或执行代码。现在它有点遗留,但一般来说它是为了让调用者知道执行情况。

零通常意味着成功执行。

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

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

为什么应该使用其中一种而不是另一种?

如果你无意返回错误代码,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%
)

关于c# - 使用显式返回 int 的 Main 方法的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593722/

相关文章:

c# - 在 C# 中运行程序时,所有消息都转到标准输出,但标准错误不包含任何内容

c# - 无法加载 DLL “OraOps10.dll”

c# - 这是将 List<T> 从模型转换为 View 中的 ObservableCollection<T> 的最佳方式吗?

php - call_user_func(array(self, 'method' )) - 我必须给类(class)命名吗?

java - 当 DefaultTableModel 已更改时在 JTable 上设置模型

c# - 指定了无效的 DN 语法 - Visual Studio 错误

c# - 测试具有静态类/方法依赖性的类

java - 面向对象的Java。尝试实现抽象方法时出错

javascript - 在 AngularJS 指令中实现继承

java - 使用public getters/setters访问同一个类中的私有(private)变量,或者直接访问变量