* này từng là trong cơ thể câu hỏi
gì sẽ rất hữu ích là một tổ chức phi tầm thường ví dụ về ứng dụng sử dụng sự kiện (đoán nó thực sự giúp thử nghiệm quá?)
Suy nghĩ cho đến thời điểm này là:
Tại sao lại sử dụng Sự kiện hoặc xuất bản/đăng ký?
Bất kỳ số lượng lớp nào cũng có thể được thông báo khi có sự kiện.
Các thuê bao lớp học không cần phải biết làm thế nào Metronome (xem mã dưới đây) hoạt động, và Metronome không cần phải biết những gì họ sẽ làm để đáp ứng với sự kiện
Các nhà xuất bản và các thuê bao được phân tách bởi đại biểu. Điều này là rất mong muốn vì nó làm cho mã linh hoạt và mạnh mẽ hơn. Các nhịp có thể thay đổi cách nó phát hiện thời gian mà không vi phạm bất kỳ các lớp học đăng ký. Các lớp học đăng ký có thể thay đổi cách chúng phản ứng với những thay đổi về thời gian mà không phá vỡ nhịp điệu. Hai lớp quay độc lập với nhau, làm cho mã dễ bảo trì hơn.
class Program
{
static void Main()
{
// setup the metronome and make sure the EventHandler delegate is ready
Metronome metronome = new Metronome();
// wires up the metronome_Tick method to the EventHandler delegate
Listener listener = new Listener(metronome);
ListenerB listenerB = new ListenerB(metronome);
metronome.Go();
}
}
public class Metronome
{
// a delegate
// so every time Tick is called, the runtime calls another method
// in this case Listener.metronome_Tick and ListenerB.metronome_Tick
public event EventHandler Tick;
// virtual so can override default behaviour in inherited classes easily
protected virtual void OnTick(EventArgs e)
{
// null guard so if there are no listeners attached it wont throw an exception
if (Tick != null)
Tick(this, e);
}
public void Go()
{
while (true)
{
Thread.Sleep(2000);
// because using EventHandler delegate, need to include the sending object and eventargs
// although we are not using them
OnTick(EventArgs.Empty);
}
}
}
public class Listener
{
public Listener(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("Heard it");
}
}
public class ListenerB
{
public ListenerB(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("ListenerB: Heard it");
}
}
Full bài viết Tôi đang viết trên trang web của tôi: http://www.programgood.net/
nb một số văn bản này là từ http://www.akadia.com/services/dotnet_delegates_and_events.html
Cheers.
Nguồn
2009-04-09 05:12:52
đây là trang Hỏi & Đáp, không phải blog ... nếu bạn thực sự muốn nhận phản hồi tại đây, hãy giảm câu hỏi của bạn xuống ... chỉ là câu hỏi và đăng phần còn lại dưới dạng câu trả lời. – Shog9