2008-09-17 26 views
29

Nói rằng tôi có một lớp có tên Frog, nó trông giống như:Làm thế nào để thêm một sự kiện vào một lớp

public class Frog 
{ 
    public int Location { get; set; } 
    public int JumpCount { get; set; } 


    public void OnJump() 
    { 
     JumpCount++; 
    } 

} 

Tôi cần giúp đỡ với 2 điều:

  1. Tôi muốn tạo ra một sự kiện có tên Nhảy vào định nghĩa lớp.
  2. Tôi muốn tạo một thể hiện của lớp Frog, và sau đó tạo ra một phương thức khác sẽ được gọi khi ếch nhảy.

Trả lời

47
public event EventHandler Jump; 
public void OnJump() 
{ 
    EventHandler handler = Jump; 
    if (null != handler) handler(this, EventArgs.Empty); 
} 

sau đó

Frog frog = new Frog(); 
frog.Jump += new EventHandler(yourMethod); 

private void yourMethod(object s, EventArgs e) 
{ 
    Console.WriteLine("Frog has Jumped!"); 
} 
+1

cảm ơn, mặc dù tôi không thấy cần thiết cho dòng này "EventHandler handler = Jump;" –

+7

điều này là để tránh xử lý chết .. trong C# giữa thời gian bạn kiểm tra nếu một trình xử lý là null và thời gian thực tế để gọi trình xử lý, phương thức có thể đã bị xóa. Vì vậy, bạn thiết lập một tham chiếu đến nơi mà trình xử lý hiện đang trỏ, sau đó kiểm tra null trên tham chiếu đó và gọi ra. –

+0

Đoạn mã đầu tiên có phải là một phạm vi toàn cục tĩnh không? Nếu không thì làm thế nào nó biết những gì frog.Jump không? – WDUK

0

@CQ: Tại sao bạn tạo ra một bản sao cục bộ pf Jump? Ngoài ra, bạn có thể lưu thử nghiệm tiếp theo bằng cách thay đổi chút ít khai báo sự kiện:

public event EventHandler Jump = delegate { }; 

public void OnJump() 
{ 
    Jump(this, EventArgs.Empty); 
} 
+2

Tạo bản sao cục bộ là một kỹ thuật phòng thủ ngăn cản một ngoại trừ từ định kỳ nếu trình xử lý bị xóa trước khi nó thực sự có cơ hội để chạy. –

+4

Ngoài ra, nếu bạn không kiểm tra null, bạn sẽ nhận được một NullReferenceException nếu không có trình xử lý sự kiện nào được gắn vào sự kiện khi gọi Jump (this, EventArgs.Empty); –

+1

Scott, bạn đang chỉ định một tham chiếu ở đây để “kỹ thuật phòng thủ” này hoàn toàn vô dụng. –

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