C# Main方法是 C# 控制台应用程序或窗口应用程序的入口点。(库和服务不要求将 C# Main 方法作为入口点。)应用程序启动时,C# Main 方法是第一个调用的方法。
C# 程序中只能有一个入口点。如果您有多个类都包含 C# Main 方法,则必须使用 /C# Main 编译器选项编译您的程序,以指定用作入口点的 C# Main 方法。有关更多信息,请参见 /C# Main(指定 C# Main 方法的位置)(C# 编译器选项)。
C# Main方法实例:
- class TestClass
- {
- static void C# Main(string[] args)
- {
- // Display the number of command line arguments:
- System.Console.WriteLine(args.Length);
- }
- }
C# Main方法概述
C# Main方法是 .exe 程序的入口点,程序控制流在该处开始和结束。
C# Main在类或结构的内部声明。C# Main 必须是静态的,且不应该是 公用的。(在前面的示例中,它接受默认访问级别 private。)但不要求封闭类或结构是静态的。
C# Main的返回类型有两种:void 或 int。
所声明的 C# Main方法可以具有包含命令行实参的 string[] 形参,也可以不具有这样的形参。使用 Visual Studio 创建 Windows 窗体应用程序时,可以手动添加形参,也可以使用 Environment 类获取命令行实参。形参读取为从零开始编制索引的命令行实参。与 C 和 C++ 不同,在 C# 中不将程序名称视为第一个命令行实参。
C# Main方法的返回值有几种情况呢?
以及是如何使用的呢?让我们来学习下。
◆C# Main方法可以是void类型:
- static void Main()
- {
- //...
- }
◆C# Main方法可以返回int类型:
- static int Main()
- {
- //...
- return 0;
- }
如果不需要使用 Main 的返回值,则返回 void 可以使代码变得略微简单。但是,返回整数可使程序将状态信息与调用该可执行文件的其他程序或脚本相关。下面的示例演示使用 Main 的返回值。
C# Main方法实例:
在此示例中,使用了一个批处理文件来执行程序并测试 Main 函数的返回值。在 Windows 中执行程序时,Main 函数返回的任何值都将存储在名为 ERRORLEVEL 的环境变量中。通过检查 ERRORLEVEL 变量,批处理文件可以确定执行的结果。通常,返回值为零指示执行成功。下面是一个非常简单的程序,其 Main 函数返回零。
- class MainReturnValTest
- {
- static int Main()
- {
- //...
- return 0;
- }
- }
由于此示例使用了批处理文件,因此最好从命令行编译这段代码,如 如何:设置环境变量中所示。
然后,使用批处理文件调用前面的代码示例所生成的可执行文件。由于代码返回零,因此批处理文件将报告成功。但如果前面的代码更改为返回非零值,然后重新编译,则批处理文件的后续执行将指示失败。
- rem test.bat
- @echo off
- MainReturnValueTest
- @if "%ERRORLEVEL%" == "0" goto good
- :fail
- echo Execution Failed
- echo return value = %ERRORLEVEL%
- goto end
- :good
- echo Execution Succeded
- echo return value = %ERRORLEVEL%
- goto end
- :end
C# Main方法示例输出
- Execution Succeded
- return value = 0
C# Main方法的传参
Visual C# Main方法的传参是什么情况呢?我们在学习C#的时候这是最基础的问题,那么我们来看看具体的内容是什么?C# Main方法传参的问题到底是什么,希望对你学习C#有所帮助。
每个C#应用程序都必须包含一个Main方法,以指定从哪里开始执行程序。在C#中,Main的首字母大写,而Java 使用小写的 main。
C# Main方法只能返回 int 或 void,并有一个代表命令行参数的可选字符串数组参数:
- static int Main(string[] args)
- {
- //...
- return 0;
- }
对于包含任何传入的命令行参数的字符串数组参数,其工作方式与在 Java 中的工作方式相同。因此,args[0] 指定第一个命令行参数,args[1] 表示第二个参数,依此类推。与 C++ 不同,args 数组不包含 EXE 文件名称。
C# Main方法的传参之其他方法
向某个方法传递参数时,可以通过值或通过引用传递参数。值参数简单地采用任意变量的值,在方法中使用。因此,调用代码中的变量值不受对方法内的参数所执行的操作的影响。
而引用参数指向在调用代码中声明的变量,因此,通过引用传递时方法将修改此变量的内容。
通过引用传递
在 Java 和 C# 中,引用某个对象的方法参数总是通过引用传递,而基元数据类型参数则通过值传递。
在 C#中,所有参数在默认情况下均通过值传递。若要通过引用传递,您需要指定关键字 ref 或 out。这两个关键字的区别在于参数初始化的不同。ref 参数必须在使用前进行初始化,而 out 参数不必在传递前进行显式初始化,并且它将忽略以前的任何值。
C# Main方法的传参之ref关键字
如果想让被调用方法永久更改用作参数的变量的值时,请在参数中指定 ref 关键字。这种做法传递的不是调用中所使用的变量的值,而是对此变量本身的引用。方法随后会处理此引用,因此在方法执行期间对此参数所做的更改将保存到用作此方法的参数的原始变量中。
下面的代码在 Add 方法中演示了此功能,其中的第二个 int 参数就是使用 ref 关键字通过引用传递的:
- class TestRef
- {
- private static void Add(int i, ref int result)
- {
- result += i;
- return;
- }
- static void Main()
- {
- int total = 20;
- System.Console.WriteLine(
- "Original value of 'total': {0}", total);
- Add(10, ref total);
- System.Console.WriteLine(
- "Value after calling Add(): {0}", total);
- }
- }
此示例很简单,其输出表明对结果参数所做的更改已在 Add 方法调用所使用的 total 变量中体现出来:
- Original value of 'total': 20
- Value after calling Add(): 30
这是因为结果参数引用了调用代码中 total 变量所占用的实际内存位置。类的属性不是变量,因此不能直接用作 ref 参数。
调用方法时,ref 关键字必须位于参数前面,并且必须位于方法声明之中。
C# Main方法的传参之out关键字
out关键字的作用与 ref 关键字非常相似,并且对使用 out 关键字声明的参数所做的更改将在方法之外体现出来。out 关键字与 ref 关键字有两点不同:
(1) 方法中将忽略 out 参数的任何初始值;
(2) 必须在方法调用过程中为 out 参数赋值:
- class TestOut
- {
- private static void Add(int i, int j, out int result)
- {
- // The following line would cause a compile error:
- // System.Console.WriteLine(
- "Initial value inside method: {0}", result);
- result = i + j;
- return;
- }
- static void Main()
- {
- int total = 20;
- System.Console.WriteLine(
- "Original value of 'total': {0}", total);
- Add(33, 77, out total);
- System.Console.WriteLine(
- "Value after calling Add(): {0}", total);
- }
- }
在此示例中,Add 方法的第三个参数就是使用 out 关键字进行声明的,并且在调用此方法时还需要对该参数使用 out 关键字。输出将为:
- Original value of 'total': 20
- Value after calling Add(): 110
总而言之,如果想让方法修改现有变量,请使用 ref 关键字;若要返回在方法内生成的值,请使用 out 关键字。当方法为调用代码生成多个结果值时,通常将 out 关键字与方法的返回值结合起来使用。
转载于:https://blog.51cto.com/1724802/592613