2010-07-22 35 views
7

Tôi có thể gọi phương thức này theo cách lập trình như thế nào? Nếu tôi đơn giản làm KillZombies(), nó nói tôi không có các thông số chính xác, nhưng tôi không biết những gì các thông số để xác định khi tôi chỉ sử dụng mã ...Lập trình kích hoạt sự kiện một cách có lập trình?

public static void KillZombies(object source, ElapsedEventArgs e) 
{ 
    Zombies.Kill(); 
} 
+0

1 cho zombie. –

Trả lời

6

Các bạn đã thử:

KillZombies(null, null); 

Có lẽ cấu trúc lại thiết kế của bạn:

public static void KillZombies(object source, ElapsedEventArgs e) 
{ 
    //more code specific to this event, logging, whathaveyou. 
    KillSomeZombies(); 
} 

public static void KillSomeZombies() 
{ 
    Zombies.Kill(); 
} 

//elsewhere in your class: 
KillSomeZombies(); 
+0

sử dụng null, null có vẻ như một giải pháp ít lộn xộn hơn. Có bất kỳ mối nguy hiểm nào khi sử dụng null, null ngoài việc có mã không phải GoodPractice không? – sooprise

+0

@Soo: chắc chắn không có gì sai khi không lặp lại chính mình. KHÔ! Tôi muốn đọc 'KillZombies (null, null);', nếu tôi đang duy trì mã này. –

1

phương pháp chữ ký của bạn yêu cầu hai đối số. Bạn không thể chỉ gọi KillZombies(), bạn sẽ cần truyền các đối số chính xác cho phương thức.

KillZombies(source, e); 

Nếu bạn không có nguồn hoặc e, bạn có thể chỉ cần bỏ giá trị rỗng.

KillZombies(null, null); 
3
KillZombies(null, null); 

Tuy nhiên, tôi sẽ đặt câu hỏi liệu đó là một thiết kế tốt.

+0

Có bất kỳ mối nguy hiểm nào để thực hiện phương pháp này không? Thiết kế tốt không phải là cực kỳ quan trọng cho khía cạnh đặc biệt này của chương trình của tôi. – sooprise

+0

Không, không nếu phương pháp đơn giản. –

3

Bạn cũng sẽ phải tạo tham số và chuyển chúng qua. Tại sao không chỉ gọi hàm trực tiếp bằng cách đặt nó vào một hàm khác có sẵn cho các lớp khác để gọi? Nó sẽ làm cho nhiều thiết kế gọn gàng hơn.

ví dụ:

internal void MakeZombiesKill() 
{ 
    Zombies.Kill(); 
} 

?

0

Bạn thường sử dụng các đối tượng từ bên trong mà bạn gọi phương thức như nguồn (hoặc null nếu tĩnh). Và đặt ElapsedEventArgs thành một cái gì đó có liên quan cho phương pháp. Đối với ElapsedEventArgs nó sẽ là một cái gì đó như: new ElapsedEventArgs() { SignalTime = DateTime.Now}

KillZombies(this, new ElapsedEventArgs() { SignalTime = DateTime.Now}); 

Nếu bạn không thực sự sử dụng nguồn hoặc e bên trong phương pháp này bạn có thể gọi nó với đối số null.

KillZombies(null, null); 
0

Về mặt kỹ thuật, bạn nên tách ra nhiệm vụ từ bên trong xử lý sự kiện và có xử lý sự kiện gọi phương thức chứa mã bạn muốn chạy, bằng cách này bạn có thể gọi mã mà không vấp ngã xử lý sự kiện. Tuy nhiên, nếu bạn muốn chuyến đi xử lý sự kiện lập trình:

KillZombies(this, new ElapsedEventArgs()) 

tôi tuy nhiên sẽ phá vỡ nó ra như là một thực hành tốt nhất thường được sử dụng ...

+0

Điều này không hoạt động như 'ElapsedEventArgs' không có hàm tạo nào được định nghĩa. – Otiel

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