2010-07-28 31 views
13
public void Bar() 
{ 
    Foo foo = new Foo(); 
    **foo.MyEvent += foo_MyEvent;** 
    foo.FireEvent();   
} 

void foo_MyEvent(object sender, EventArgs e) 
{ 
    ((Foo)sender).MyEvent -= foo_MyEvent; 
} 

Xin chào, tôi có thể cho tôi biết toán tử + = hoạt động với sự kiện là gì?+ = toán tử với Sự kiện

Trả lời

31

+= đăng ký sự kiện. Người đại diện hoặc phương pháp ở bên phải của += sẽ được thêm vào danh sách nội bộ mà sự kiện theo dõi và khi lớp sở hữu kích hoạt sự kiện đó, tất cả các đại biểu trong danh sách sẽ được gọi.

+15

và '- =' hủy đăng ký – CaffGeek

0

Nó thêm trình xử lý cho sự kiện. Nó có nghĩa là phương thức ở phía bên phải của toán tử sẽ được gọi khi sự kiện sẽ được tăng lên.

1

Trong trường hợp này phương pháp foo_MyEvent sẽ cháy whene sự kiện đó được gọi là (do đó bạn đăng ký vào các sự kiện trong dòng 4)

17

Câu trả lời bạn đã chấp nhận là một phiên bản đơn giản thoải mái về những gì += có, nhưng nó không phải là toàn bộ câu chuyện.

Nhà điều hành += gọi phương thức thêm vào sự kiện. Tương tự, -= cuộc gọi sẽ bị xóa. Điều này thường là kết quả trong đại biểu được thêm vào danh sách xử lý nội bộ được gọi khi sự kiện được kích hoạt, nhưng không phải lúc nào cũng là.

Hoàn toàn có thể xác định thêm để làm điều gì đó khác. Ví dụ này có thể giúp chứng minh những gì sẽ xảy ra khi bạn gọi +=:

class Test 
{ 
    public event EventHandler MyEvent 
    { 
     add 
     { 
      Console.WriteLine("add operation"); 
     } 

     remove 
     { 
      Console.WriteLine("remove operation"); 
     } 
    }  

    static void Main() 
    { 
     Test t = new Test(); 

     t.MyEvent += new EventHandler (t.DoNothing); 
     t.MyEvent -= null; 
    } 

    void DoNothing (object sender, EventArgs e) 
    { 
    } 
} 

Output: Bài viết

 
add operation 
remove operation 

Xem Jon Skeet trên events and delegates để biết thêm thông tin.

+1

Điều này là chính xác. Câu trả lời của tôi nên phản ánh hành vi của tất cả các sự kiện mà bạn sẽ tìm thấy trên các lớp khung công tác, nhưng có thể không phải là điều sẽ xảy ra nếu bạn đăng ký sự kiện của người khác. – mquander

1

Sự kiện chỉ là danh sách bất biến của đại biểu (nghĩa là đăng ký sẽ được gọi khi có nội dung nào đó xuất bản/gọi sự kiện đó). Bạn có thể lập luận rằng chúng tôi có thể đã sử dụng Danh sách thay thế. Nếu chúng tôi đi theo cách đó, ai đó có thể đã nóng lòng với người đăng ký của chúng tôi.

Trong tình huống trên, nơi bạn sử dụng List, bạn có thể làm:

lstDelegate = newDelegate

và bạn đã bị xóa sổ các thuê bao hiện có (lstDelegate chỉ chứa ur đại biểu gọi lại bây giờ).

Để dừng ứng dụng đó, chúng tôi có Sự kiện. Khi bạn sử dụng sự kiện, trình duyệt sẽ không cho phép bạn thực hiện điều đó, bạn chỉ được phép thêm/xóa đại biểu của riêng bạn bằng cách sử dụng + = và - =. Đó là cách tôi cố gắng phân biệt nó. hy vọng nó giúp.

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