lớp của tôi với một sự kiện:sự kiện hội nghị - Tôi không nhận được nó
public class WindowModel
{
public delegate void WindowChangedHandler(object source, WindowTypeEventArgs e);
public event WindowChangedHandler WindowChanged;
public void GotoWindow(WindowType windowType)
{
this.currentWindow = windowType;
this.WindowChanged.Invoke(this, new WindowTypeEventArgs(windowType));
}
}
nguồn gốc lớp sự kiện:
public class WindowTypeEventArgs : EventArgs
{
public readonly WindowType windowType;
public WindowTypeEventArgs(WindowType windowType)
{
this.windowType = windowType;
}
}
Một số lớp khác mà đăng ký nó tới sự kiện:
private void SetupEvents()
{
this.WindowModel.WindowChanged += this.ChangeWindow;
}
private void ChangeWindow(object sender, WindowTypeEventArgs e)
{
//change window
}
Tôi đã đạt được gì sau khi thực hiện theo quy ước .Net? Nó sẽ có ý nghĩa hơn để có một hợp đồng như thế này
public delegate void WindowChangedHandler(WindowType windowType);
public event WindowChangedHandler WindowChanged;
Làm theo cách này, tôi không cần phải tạo ra một lớp mới và là dễ hiểu hơn. Tôi không mã hóa thư viện .Net. Mã này sẽ chỉ được sử dụng trong dự án này. Tôi thích các công ước nhưng tôi có đúng không khi tôi nói rằng trong ví dụ này, nó không có ý nghĩa hoặc tôi đã hiểu nhầm điều gì đó?
Tôi thực sự thích câu trả lời này! Điểm đầu tiên là rất rõ ràng, nhưng một cái gì đó tôi đã không nghĩ về. Điểm thứ hai tôi không biết nhưng nó là rất tốt đẹp :) Không chắc tôi hiểu điểm thứ ba của bạn. Cảm ơn! –
@bobjink: Rất vui được! Điểm thứ ba của tôi là về việc có thể gửi dữ liệu trở lại đối tượng đang gọi sự kiện. Sử dụng cách tiếp cận 'EventArgs', bạn có thể cho phép người tiêu dùng của sự kiện của bạn sửa đổi một thuộc tính trên nó, giống như trên lớp' CancelEventArgs', nó sẽ cho phép nó truyền dữ liệu cho bạn. –
Tôi thấy ngay bây giờ! Cảm ơn :) –