2010-03-06 40 views

Trả lời

4

số C# lambdas không hỗ trợ các sự kiện, vì vậy không có cách nào để trình bày này. Bạn sẽ phải sử dụng sự phản chiếu.

+0

Tôi không muốn sử dụng những thứ như "GetEventInfo (button1," Click ") vì đầu vào có tên chuỗi sự kiện. Có cách nào khác cách lấy 100% tên sự kiện hoặc tham chiếu đến EventInfo hoặc ủy quyền hay không để add_/remove_ metod của sự kiện? Một số cách AOP hoặc cái gì khác? Cảm ơn – TcKs

+2

@TcKs - không thực sự. Tùy chọn: (1) sử dụng giao diện để hiển thị sự kiện của bạn và truyền tới giao diện đó; (2) (chỉ áp dụng để '* Thay đổi') sử dụng trừu tượng như' PropertyDescriptor' có thể ánh xạ các thuộc tính cho các sự kiện phù hợp với bạn, (3) sống với các chuỗi (với một số xét nghiệm đơn vị). nhà điều hành ở đây, nhưng nó không tồn tại. Chúng tôi tiếp tục yêu cầu ... –

+0

Cảm ơn các đề xuất – TcKs

6

Có, nó giống như nhận tên thuộc tính, nhưng bạn phải làm điều đó trong lớp xác định sự kiện.

public class Foo 
{ 
    public event EventHandler Bar; 

    public string BarName 
    { 
     get 
     { 
      return this.GetEventName(() => this.Bar); 
     } 
    } 

    private string GetEventName(Expression<Func<EventHandler>> expression) 
    { 
     return (expression.Body as MemberExpression).Member.Name; 
    } 
} 

Thưởng thức.

+0

Nếu tôi hiểu đúng, trong trường hợp này là "this.Bar" được chấp nhận là f ield, phải không? Nó sẽ hoạt động tương tự với "EventHandler Bar" và "EventHandler Bar", đúng không? Điều này không hữu ích cho mục đích của tôi (tôi đang sử dụng các lớp của bên thứ 3), nhưng có thể giải pháp trong một số trường hợp. Cảm ơn bạn đã trả lời! (+1) – TcKs

+0

Vâng, tôi e rằng bạn đã đúng. Bạn chỉ có thể sử dụng phương pháp này trong lớp xác định sự kiện. – Enigmativity

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