2012-01-21 46 views
10

Vui lòng cho tôi biết lý do tại sao Tham sốThreadStart lớp chỉ cho phép phương thức chỉ loại đối số System.object chứa.Tại sao ParameterizedThreadStart chỉ cho phép tham số đối tượng?

public class MainThreadTest 
{ 
    public static void Main(string[] args) 
    { 
     Thread T = new Thread(new ParameterizedThreadStart(DisplayYOrX)); 
     T.Start("X"); 

     DisplayYOrX("Y"); 
    } 

    static void DisplayYOrX(object outValue) 
    { 
     string Parameter = (string)outValue; 

     for(int i=0; i<10; i++) 
      Console.Write(Parameter); 
    } 
} 

Tại sao tôi muốn biết về điều đó là tôi không muốn sử dụng cú pháp truyền kiểu một lần nữa.

string Parameter = (string)outValue; 

Trả lời

15

Lý do cho sự hạn chế là ThreadStart không phải là một đại biểu chung chung và do đó nó chỉ có khả năng đi qua một object xung quanh. Điều này là dễ dàng, đủ để làm việc xung quanh mặc dù bằng cách sử dụng một lambda nơi bạn trực tiếp vượt qua giá trị.

public static void Main(string[] args) { 
    ThreadStart start =() => { 
    DisplayYOrX("X"); 
    }; 
    Thread t = new Thread(start); 
    t.Start(); 

    ... 
} 

static void DisplayYOrX(string outValue) { 
    ... 
} 

Phiên bản dành cho C# 2,0

public static void Main(string[] args) { 
    ThreadStart start = delegate { 
    DisplayYOrX("X"); 
    }; 
    Thread t = new Thread(start); 
    t.Start(); 

    ... 
} 
+0

Tôi nghĩ rằng, như đối với nhà phát triển người sử dụng 2.0 .net framework, lambda là khó sử dụng. Tôi có đúng không? –

+0

@Frank Tôi vừa cập nhật câu trả lời của mình để bao gồm một phiên bản sẽ hoạt động với trình biên dịch C# 2.0. Lưu ý: Việc sử dụng cú pháp lambda là hợp lệ ngay cả trong khung 2.0, miễn là bạn sử dụng trình biên dịch C# 3.0 hoặc cao hơn. Dù bằng cách nào, các mẫu thứ hai tôi đưa lên đó sẽ làm việc với tất cả mọi thứ C# 2.0 và trên – JaredPar

+0

Tôi thực sự quan tâm đến cách bạn nói rằng chúng ta có thể sử dụng cú pháp lambda trong khuôn khổ 2.0. Vì vậy, bạn có thể vui lòng cho tôi biết làm thế nào chúng ta có thể làm điều đó. Bất kỳ liên kết tham chiếu nào? –

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