ECMA-334: 10.1 Application startup
Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio
| C# Language Specification |
| © 2006 ECMA International |
10.1 Application startup
Application startup occurs when the execution environment calls a designated method, which is referred to
as the application's entry point. This entry point method is always named Main, and shall have one of the
following signatures:
static void Main() {…} static void Main(string[] args) {…} static int Main() {…} static int Main(string[] args) {…}
As shown, the entry point can optionally return an int value. This return value is used in application
termination (§10.2).
The entry point can optionally have one formal parameter, and this formal parameter can have any name. If
such a parameter is declared, it shall obey the following constraints:
- The implementation shall ensure that the value of this parameter is not
null.
- Let args be the name of the parameter. If the length of the array designated by
argsis greater than zero, the array membersargs[0]throughargs[args.Length-1], inclusive, shall refer to strings, called application parameters, which are given implementation-defined values by the host environment
prior to application startup. The intent is to supply to the application information determined prior to application startup from elsewhere in the hosted environment. If the host environment is not capable of supplying strings with letters in both uppercase and lowercase, the implementation shall ensure that the strings are received in lowercase. [Note: On systems supporting a command line, application parameters correspond to what are generally known as command-line arguments. end note]
Since C# supports method overloading, a class or struct can contain multiple definitions of some method,
provided each has a different signature. However, within a single program, no class or struct shall contain
more than one method called Main whose definition qualifies it to be used as an application entry point.
Other overloaded versions of Main are permitted, however, provided they have more than one parameter, or
their only parameter is other than type string[].
An application can be made up of multiple classes or structs. It is possible for more than one of these classes
or structs to contain a method called Main whose definition qualifies it to be used as an application entry
point. In such cases, one of these Main methods shall be chosen as the entry point so that application startup
can occur. This choice of an entry point is beyond the scope of this specification—no mechanism for
specifying or determining an entry point is provided.
In C#, every method shall be defined as a member of a class or struct. Ordinarily, the declared accessibility (§10.5.1) of a method is determined by the access modifiers (§17.2.3) specified in its declaration, and similarly the declared accessibility of a type is determined by the access modifiers specified in its declaration. In order for a given method of a given type to be callable, both the type and the member shall be accessible. However, the application entry point is a special case. Specifically, the execution environment can access the application's entry point regardless of its declared accessibility and regardless of the declared accessibility of its enclosing type declarations.
The entry point method shall not be defined in a generic class declaration (§25.1) or a generic struct declaration (§25.2).
In all other respects, entry point methods behave like those that are not entry points.