2011-05-27 26 views
12

Đây sẽ là câu hỏi từ người mới bắt đầu C#. Khi tôi tạo ứng dụng giao diện điều khiển, tôi nhận phương thức chính với tham số args làm chuỗi mảng. Tôi không hiểu làm thế nào phương pháp này được gọi là bởi hệ thống và làm thế nào args được chuyển đến phương pháp chính. Có lẽ ai đó có thể giải thích? Là phương pháp chính được ghi đè của một số loại lớp giao diện điều khiển?Đối số ứng dụng giao diện điều khiển, cách đối số được chuyển đến Phương thức chính

namespace ConsoleApplication1 
{ 
    class Program 
    {  
     static void Main(string[] args) 
     {  
     } 
    } 
} 

Trả lời

18

Phương thức chính là điểm Nhập của ứng dụng của bạn. Nếu bạn kiểm qua ildasm sau đó

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 

Đây là những gì giúp trong cách gọi phương thức

Các đối số được truyền như nói C:\AppName arg1 arg2 arg3

0

Phương pháp chính của công cụ runtime trông giống như int main(int argc, char *argv[]), trong đó argc là số đếm đối số và argv là một mảng con trỏ cho mỗi đối số. Công cụ thời gian chạy chuyển đổi thành một dạng tự nhiên hơn với C#.

Trước khi phương thức chính đó được gọi, mọi thứ đều có trong ngôn ngữ assembly. Nó có quyền truy cập vào các đối số dòng lệnh (vì hệ điều hành làm cho có sẵn cho mọi tiến trình bắt đầu), nhưng ngôn ngữ assembly đó cần chuyển đổi một chuỗi của dòng lệnh đầy đủ thành nhiều phần tử (sử dụng khoảng trống để tách chúng) trước khi nó sẵn sàng chuyển chúng thành chính().

6

Thời gian chạy tách các đối số được đưa ra tại giao diện điều khiển ở mỗi không gian.

Nếu bạn gọi

myApp.exe arg1 arg2 arg3 

Phương pháp chính được một mảng các đối số dòng

var args = new string[] {"arg1","arg2","arg3"} 
1

lệnh là một cách để vượt qua các đối số trong. This mẫu MSDN là đáng để thử qua. Các đối số dòng lệnh MSDN Page cũng đáng đọc.

Từ bên trong visual studio bạn có thể thiết lập các đối số dòng lệnh bằng cách chọn các thuộc tính của ứng dụng giao diện điều khiển của bạn sau đó chọn tab Debug

+0

đó là câu trả lời tôi đang tìm kiếm, làm thế nào để vượt qua các tham số để phương pháp gỡ lỗi chính trong VS. – RobertoFRey

1

Mỗi quản lý exe có một điểm một mục mà có thể được nhìn thấy khi nếu bạn nạp mã của bạn tới ILDASM. Entry Point được chỉ định trong CLR đứng đầu và sẽ trông giống như thế này.

enter image description here

1

Đọc MSDN.

nó cũng chứa liên kết tới arg.

câu trả lời ngắn: không, chính không bị ghi đè. khi visual studio (thực sự là trình biên dịch) xây dựng exe của bạn, nó phải khai báo một điểm khởi đầu cho assmebly, điểm đó là hàm main.

nếu bạn có ý định làm thế nào để chuyển qua văn bản thì bạn có thể chạy ứng dụng từ dòng lệnh với chúng (ví dụ appname.exe param1 param2) hoặc trong thiết lập dự án, nhập chúng (trong đối số dòng lệnh trong Debug tab)

trong chính bạn sẽ cần phải đọc những args ví dụ:

for (int i = 0; i < args.Length; i++) 
{ 
    string flag = args.GetValue(i).ToString(); 
    if (flag == "bla") 
    { 
     Bla(); 
    } 
} 
8

như thế nào chính được gọi là?

Khi bạn đang sử dụng mẫu ứng dụng bảng điều khiển, mã sẽ được biên dịch yêu cầu một phương thức được gọi là Main trong đối tượng khởi động vì Main là thị trường làm điểm vào ứng dụng.

Theo mặc định, không có đối tượng khởi động nào được chỉ định trong cài đặt thích hợp của dự án và lớp Chương trình sẽ được sử dụng theo mặc định. Bạn có thể thay đổi điều này trong thuộc tính dự án trong tab "Xây dựng" nếu bạn muốn.

Hãy nhớ rằng đối tượng nào bạn gán là đối tượng khởi động phải có phương thức có tên Chính trong đó.

như thế nào args truyền cho phương pháp chính

Định dạng được chấp nhận là MyConsoleApp.exe value01 value02 vv ...

Ứng dụng gán cho mỗi giá trị sau mỗi không gian thành một yếu tố riêng biệt của mảng tham số.

Như vậy, MyConsoleApp.exe value01 value02 sẽ có nghĩa args bạn paramter có 2 yếu tố:

[0] = "value01" 

[1] = "value02" 

Làm thế nào bạn phân tích các giá trị đầu vào và sử dụng chúng là tùy thuộc vào bạn.

Hy vọng điều này sẽ hữu ích.

Đọc thêm:

Creating Console Applications (Visual C#)

Command-Line Arguments (C# Programming Guide)

0

bạn có thể vượt qua cũng bằng cách làm cho chức năng và sau đó trong chức năng này, bạn gọi phương thức chính và vượt qua đối số cho phương pháp chính

static int Main(string[] args) 
    { 


     foreach (string b in args) 
      Console.WriteLine(b+" "); 

     Console.ReadKey(); 
     aa(); 
     return 0; 

    } 
    public static void aa() 
    { 
     string []aaa={"Adil"}; 

     Console.WriteLine(Main(aaa)); 
    } 
2

trong studio trực quan, bạn cũng có thể làm như vậy để vượt qua một cách đơn giản hoặc tránh đối số comandline

static void Main(string[] args) 
    { 
     if (args == null) 
     { 
      Console.WriteLine("args is null"); // Check for null array 
     } 
     else 
     { 
      args=new string[2]; 
      args[0] = "welcome in"; 
      args[1] = "www.overflow.com"; 
      Console.Write("args length is "); 
      Console.WriteLine(args.Length); // Write array length 
      for (int i = 0; i < args.Length; i++) // Loop through array 
      { 
       string argument = args[i]; 
       Console.Write("args index "); 
       Console.Write(i); // Write index 
       Console.Write(" is ["); 
       Console.Write(argument); // Write string 
       Console.WriteLine("]"); 
      } 
     } 
24

Tất cả các câu trả lời là tuyệt vời và giải thích tất cả mọi thứ rất tốt

nhưng tôi chỉ muốn chỉ ra differant way for passing args phương pháp chính

trong visual studio

  1. right click on project sau đó chọn Properties
  2. truy cập debug tab sau đó trên phần start options cung cấp ứng dụng với args bạn

như hình ảnh này

Properties window

và bí mật biết hạnh phúc

Các vấn đề liên quan