2010-07-22 15 views
7

Come posso chiamare questo metodo a livello di programmazione? Se io semplice fare KillZombies(), si dice che non ho i parametri corretti, ma non so quali parametri per specificare quando sto solo utilizzando il codice ...Avvio programmatico di un evento?

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

+1 per gli zombie. –

risposta

6

Hai provato:

KillZombies(null, null); 

Forse refactoring del disegno:

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

utilizzando null, null sembra una soluzione meno ingombrante. Ci sono dei pericoli nell'usare null, null oltre ad avere un codice non GoodPractice? – sooprise

+0

@Soo: sicuramente non c'è niente di sbagliato nel non ripetersi. ASCIUTTO! Preferirei leggere il 'KillZombies (null, null);', se stavo mantenendo questo codice. –

1

Il tuo metodo di firma richiede due argomenti. Non puoi semplicemente chiamare KillZombies(), dovrai passare gli argomenti corretti al metodo.

KillZombies(source, e); 

Se non si dispone della propria origine o e, è sufficiente passare null.

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

Tuttavia, mi chiedo se questo è un buon progetto.

+0

Ci sono dei pericoli nell'adottare questo approccio? Un buon design non è molto importante per questo aspetto particolare del mio programma. – sooprise

+0

No, non se il metodo è così semplice. –

3

Dovresti creare i parametri e passarli anche tu. Perché non chiamare semplicemente la funzione direttamente inserendola in un'altra funzione disponibile per altre classi da chiamare? Farà per il design molto più ordinato.

cioè

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

?

0

Di solito si utilizza l'oggetto da dentro, che si chiama il metodo come sorgente (o null se statica). E impostare ElapsedEventArgs su qualcosa di rilevante per il metodo. Per ElapsedEventArgs sarebbe qualcosa di simile: new ElapsedEventArgs() { SignalTime = DateTime.Now}

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

Se non si ha realmente utilizzano sorgente o posta all'interno del metodo si può chiamare con argomenti nulli.

KillZombies(null, null); 
0

Tecnicamente parlando, si dovrebbe separare il compito dall'interno del gestore di eventi e avete il gestore di eventi chiamare il metodo che contiene il codice che si desidera eseguire, in questo modo è possibile chiamare quel codice senza intervento del gestore di eventi. Tuttavia, se si desidera scattare il gestore di eventi a livello di codice:

KillZombies(this, new ElapsedEventArgs()) 

Io però vorrei spezzare fuori come è una best practice di uso frequente ...

+0

Questo non funziona poiché 'ElapsedEventArgs' non ha definito costruttori. – Otiel

Problemi correlati