2012-06-23 37 views
5

Thỉnh thoảng tôi không thể hiểu được những điều đơn giản nhất, tôi chắc chắn nó nằm trong khuôn mặt của tôi, tôi chỉ không nhìn thấy nó. Im cố gắng để tạo ra một đại biểu cho một phương pháp trong lớp học đơn giản này:Hành động <> làm rõ nhiều cú pháp thông số

public static class BalloonTip 
{ 
    public static BalloonType BalType 
    { 
     get; 
     set; 
    } 

    public static void ShowBalloon(string message, BalloonType bType) 
    { 
     // notify user 
    } 
} 

Bây giờ, hành động này <> có nghĩa vụ phải tạo ra các đại biểu mà không thực sự tuyên bố một với từ khóa "đại biểu", tôi đã hiểu được một cách chính xác? Sau đó:

private void NotifyUser(string message, BalloonTip.BalloonType ballType) 
    { 
     Action<string, BalloonTip.BalloonType> act; 
     act((message, ballType) => BalloonTip.ShowBalloon(message, ballType)); 
    } 

Điều này không biên dịch được. Tại sao?

(Nhân tiện, lý do tại sao tôi cần đại biểu này thay vì gọi trực tiếp ShowBalloon(), là các cuộc gọi phải được thực hiện từ một chủ đề khác so với giao diện người dùng, vì vậy tôi thấy mình cần Action <>)

Cảm ơn,

+0

Hành động <> không có gì đặc biệt, nó chỉ là một đại biểu chung (hoặc Bộ thay vì) Microsoft có trong không gian tên "Hệ thống" trên khuôn khổ .NET. – Marlon

Trả lời

9

bạn cần phải đầu tiên gán phương pháp vô danh của bạn để biến Action, sau đó gọi nó với những lập luận thông qua vào phương pháp:

private void NotifyUser(string message, BalloonTip.BalloonType ballType) 
{ 
    Action<string, BalloonTip.BalloonType> act = 
     (m, b) => BalloonTip.ShowBalloon(m, b); 

    act(message, ballType); 
} 

trong trường hợp này, kể từ khi lập luận mong đợi ed bởi biến Action bạn đang giống hệt với phương pháp đóng gói, bạn cũng có thể tham khảo các phương pháp trực tiếp:

private void NotifyUser(string message, BalloonTip.BalloonType ballType) 
{ 
    Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon; 

    act(message, ballType); 
} 
+0

Cảm ơn, cuối cùng tôi đã hiểu được Hành động này được cho là hoạt động như thế nào và được sử dụng. –

2

nên không bạn gán vào biến act? Một cái gì đó trong dòng:

Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon; 

không chỉ bạn không gán một phương pháp để act, vì nó có vẻ như bạn đang cố gắng để gọi hành động đi qua nó một phương pháp mang tính chất như một tham số, trong khi nó nhận được một chuỗi và một BalloonTip .BalloonType.
Cuối cùng, bạn nên trở act, và do đó phương pháp của bạn để có được một đại biểu cho phương thức thông báo nên là:

public Action<string, BalloonTip.BalloonType> GetNotificationMethod() { 
    Action<string, BalloonTip.BalloonType> act = BalloonTip.ShowBalloon; 
    return act; 
} 

Bạn cũng có thể làm cho nó đơn giản hơn:

public Action<string, BalloonTip.BalloonType> GetNotificationMethod() { 
    return BalloonTip.ShowBalloon; 
} 

Hope tôi đã hiểu câu hỏi của bạn ok. Chúc may mắn.

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