Main(string[] args)方法是C#程序的入口,程序從這裏開始執行,在這裏結束。C#代碼邏輯要包含在一個類型(Type)中,遊離的、全局的變量或函數是不存在的,這裏的類型包括類(class)、接口(interface)、結構(struct)、枚舉(enum)和委託(delegate)。Main()方法包含在一個類中,這個類的默認名字叫做Program,包含Main()的類叫做應用程序對象(Application Object)。新建一個控制檯應用程序(ConsoleApplication)。html
程序中包含的初始代碼爲:數組
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace exer 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 } 14 } 15 }
上面代碼中,exer是定義的命名空間,與建立的控制檯應用程序的名稱相同;Main(string[] args)是程序的主方法(或稱主函數),即程序的入口,程序將從這裏開始執行,也在這裏結束;Program是包含Main()方法的類,即上面提到的應用程序對象。編輯器
一個控制檯應用程序項目中能夠存在多個應用程序對象,便可以存在多個Main()方法分佈在不一樣的類中。可是程序每次執行時只能選擇啓動一個應用程序對象,即只能選擇一個Main()方法做爲程序的入口。通知編譯器將哪一個Main()方法做爲程序的入口能夠在項目屬性編輯器的應用程序(Application)選項卡中的啓動對象(Startup Object)處設置。函數
下面編寫兩個應用程序對象,並分別啓動測試,代碼以下。其中,將用不到的using引用刪去了;Console.ReadLine()方法用來從控制檯接收鍵盤輸入的一段以回車符結束的字符串,這裏起到暫停控制檯的做用(不然調試程序時,控制檯會一閃而過!),但也能夠不調試程序而是直接運行,就不會出現一閃而過的狀況了。學習
1 using System; 2 3 namespace exer 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Console.WriteLine("From Program!"); 10 Console.ReadLine(); 11 } 12 } 13 14 class AnotherProgram 15 { 16 static void Main(string[] args) 17 { 18 Console.WriteLine("From AnotherProgram!!"); 19 Console.ReadLine(); 20 } 21 } 22 }
調試程序,編譯器報錯。測試
打開項目屬性編輯器,在應用程序(Application)選項卡中的啓動對象(Startup Object)下拉框中選擇程序入口點,分別運行程序,查看結果。spa
1、關於Main()方法命令行
Main()方法形式通常以下:調試
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 } 7 }
其中,static表示Main()方法是一個靜態方法;void表示Main()方法返回值爲空,是說咱們不須要在Main()方法結尾處寫上return語句來顯示定義一個返回值,但程序在運行結束後仍是會自動返回給系統一個表示程序是否正常結束的值(0或其餘值,0表示程序正常結束、其餘值如-1表示程序有錯誤發生);Main()方法中有一個字符串數組類型的形式參數,包含程序啓動時傳遞給系統的命令行參數。code
除了這種默認的形式,Main()方法還能夠是其餘的形式。構造什麼樣的Main()方法須要考慮兩個問題:①程序執行結束後是否要向系統返回一個值 ②程序是否須要處理用戶提供的命令行參數
1 class Program //默認形式 2 { 3 static void Main(string[] args) 4 { 5 6 } 7 } 8 class Program 9 {
10 static int Main(string[] args) 11 { 12 return 0; 13 } 14 } 15 class Program 16 { 17 static void Main() 18 { 19 20 } 21 } 22 class Program 23 { 24 static int Main() 25 { 26 return 0; 27 } 28 }
2、提供給程序命令行參數
Main(string[] args)方法中,用戶提供的命令行參數是保存在args字符串數組中的,當提供參數後,在Main()方法中就能夠遍歷args數組查看這些參數。設置遍歷參數的C#語句(也可使用foreach)。
1 for(int i=0;i<args.Length;i++) 2 Console.WriteLine("arg:{0}",args[i]);
那麼,如何提供給程序這些命令行參數呢?有兩種方法。
①Developer Command Prompt命令行中提供參數
打開DCP(開發人員命令提示),切換到程序所在路徑,運行已經編譯好的exer.exe應用程序同時輸入參數,參數能夠不包括前綴('\'或'-',固然也能夠包含..),以空格分隔。
②Visual Studio項目屬性編輯器中指定命令行參數,一樣以空格分隔
3、代碼訪問命令行參數的其餘方法
當提供給程序命令行參數後,可使用for或者foreach語句進行args參數的遍歷,還可使用System.Environment類的靜態方法GetCommandLineArgs()進行參數的訪問。System.Environment.GetCommandLineArgs()返回一個字符串數組,即包含命令行參數的數組。
1 static void Main(string[] args) 2 { 3 Console.WriteLine("From Program!"); 4 5 //for(int i=0;i<args.Length;i++) 6 // Console.WriteLine("arg:{0}",args[i]); 7 8 string[] arr = System.Environment.GetCommandLineArgs(); 9 for(int i=0;i<arr.Length;i++) 10 Console.WriteLine("arg:{0}",arr[i]); 11 Console.ReadLine(); 12 }
System.Environment.GetCommandLineArgs()返回的字符串數組中,第一個字符串是當前應用程序的徹底路徑名,其餘字符串是用戶提供給程序的命令行參數。當使用這種方法獲取命令行參數時,Main()括號中能夠去掉string[] args形式參數了。
返回目錄:C#學習筆記