2009-02-25 18 views
20

Định dạng đúng để khai báo trình xử lý sự kiện trong giao diện nếu bạn đang sử dụng lớp con tùy chỉnh của EventHandler thay vì lớp EventHandler cơ sở.Trong C# Làm cách nào để tạo sự kiện với trình xử lý sự kiện tùy chỉnh như một phần của giao diện?

tôi tạo ra các lớp con MyEventHandler EventHandler ví dụ như trong việc kê khai đại biểu, nhưng bạn không thể khai báo một delegate trong một giao diện ...

Khi tôi hỏi Visual Studio để giải nén một giao diện nó tham chiếu đến EventHandler trong IMyClassName như MyClassName.MyEventHandler rõ ràng đóng vai trò tàn phá với khớp nối kiểu.

Tôi giả sử có một cách đơn giản để thực hiện việc này, tôi có phải khai báo rõ ràng trình xử lý sự kiện của tôi trong một tệp riêng biệt không?

+0

bạn có nghĩa là bạn muốn buộc một havi lớp ng một số sự kiện? – abatishchev

+0

Tôi muốn sự kiện được khai báo trong giao diện để mọi lớp thực hiện giao diện đó cũng phải triển khai sự kiện đó. –

Trả lời

23

Vâng, bạn cần xác định arg và có thể ủy quyền ở đâu đó. Bạn không cần cần một tệp thứ hai, nhưng tôi có thể khuyên bạn nên ... nhưng các lớp học có lẽ không nên là lồng nhau, nếu đó là vấn đề ban đầu.

Đề xuất là sử dụng mẫu "người gửi, người gửi" chuẩn; có hai cách tiếp cận cmmon:

1: khai báo một lớp sự kiện-args riêng biệt, và sử dụng EventHandler<T> trên giao diện:

public class MySpecialEventArgs : EventArgs {...} 
... 
EventHandler<MySpecialEventArgs> MyEvent; 

2: khai báo một lớp và đại biểu loại sự kiện-args riêng:

public class MySpecialEventArgs : EventArgs {...} 
public delegate void MySpecialEventHandler(object sender, 
    MySpecialEventArgs args); 
.... 
event MySpecialEventHandler MyEvent; 
+0

Cảm ơn nó có vẻ như là công trình. –

14

Giả sử C# 2.0 hoặc mới hơn ...

public class MyEventArgs: EventArgs 
{ 
    // ... your event args properties and methods here... 
} 

public interface IMyInterface 
{ 
    event EventHandler<MyEventArgs> MyEvent; 
} 
+0

Cảm ơn điều đó làm việc một điều trị. –

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