为什么C#具有静态Main()但C ++没有静态main

时间:2015-03-15 11:36:35

标签: c# c++

出于好奇, C#需要一个静态Main(),一些模块(可能来自OS)调用Main而不创建对象但是为什么C ++不适用?当然在C ++中,main不是任何类的一部分。如何从我的应用程序的外部以两种不同的方式调用它们?

为什么C#主要不像C ++那样主要,是否因为C#刚刚引入(仅用于命名约定),因为方法应该以大写字母或某些或其他原因开头?

2 个答案:

答案 0 :(得分:11)

Main vs main而言,情况很简单:Microsoft决定Main遵守自己的naming conventions on capitalization

static与非static的情况需要更多背景知识:C ++具有C#所不具备的功能 - 即独立功能(即不属于任何成员的功能)类)。将static关键字应用于C ++函数时,其含义会根据函数是类的成员还是独立的函数而更改。

static应用于C ++中的成员函数时,其含义与C#相同,即函数成为类函数,而不是实例函数。

当您将static应用于独立的非成员函数时,含义会发生变化:C ++编译器使该函数在给定的转换单元外部不可见。除此之外,这使得该函数对C ++运行时库的一部分不可见,该库处理启动并将控制权传递给main函数。

由于C ++标准指定入口点是通过非成员函数,因此将static应用于main会将其隐藏在C ++运行时中,使其无法用作入口点。有关如果main静态发生的情况,请参阅this Q&A

答案 1 :(得分:0)

实际上原因很简单,人们不必看得太远就知道这个原因。 C ++向下兼容C(或多或少)。并且C具有主要功能,其按照惯例是应用程序的起点。通过对C代码的微小更改,您可以使用C ++编译器编译c代码。

但是,C#没有这个限制,因此可以通过将静态main定义为任意类的成员来定义应用程序的不同入口点。因为C#没有独立的函数,只有实例方法和静态方法。