2010-07-22 20 views
7

मैं इस विधि को प्रोग्रामेटिक रूप से कैसे कॉल कर सकता हूं? अगर मैं सरल कर KillZombies(), यह कहता है कि मैं सही पैरामीटर नहीं है, लेकिन मैं क्या मापदंडों जब मैं सिर्फ कोड का उपयोग कर रहा निर्दिष्ट करने के लिए नहीं पता ...प्रोग्रामेटिक रूप से एक ईवेंट ट्रिगर कर रहा है?

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

+1 लाश के लिए। –

उत्तर

6

आप की कोशिश की है:

KillZombies(null, null); 

शायद अपने डिजाइन refactor:

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

शून्य का उपयोग करते हुए, शून्य एक कम अव्यवस्थित समाधान की तरह लगता है। क्या गैर-गुड प्रैक्टिस कोड रखने के अलावा शून्य, शून्य का उपयोग करने का कोई खतरा है? – sooprise

+0

@Soo: निश्चित रूप से खुद को दोहराने के साथ कुछ भी गलत नहीं है। सूखी! मैं 'KillZombies (शून्य, शून्य) को पढ़ना पसंद करूंगा;', अगर मैं इस कोड को बनाए रख रहा था। –

1

आपका विधि हस्ताक्षर दो तर्क की आवश्यकता है। आप केवल KillZombies() को कॉल नहीं कर सकते हैं, आपको विधि में सही तर्क पारित करने की आवश्यकता होगी।

KillZombies(source, e); 

यदि आपके पास अपना स्रोत या ई नहीं है, तो आप बस शून्य से गुजर सकते हैं।

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

हालांकि, मैं सवाल होता है कि एक अच्छा डिजाइन है या नहीं।

+0

क्या इस दृष्टिकोण को लेने के लिए कोई खतरा है? मेरे कार्यक्रम के इस विशेष पहलू के लिए अच्छा डिजाइन बेहद महत्वपूर्ण नहीं है। – sooprise

+0

नहीं, अगर यह विधि सरल नहीं है। –

3

आपको पैरामीटर बनाना होगा और उन्हें भी पास करना होगा। क्यों न केवल अन्य कार्यों के लिए उपलब्ध अन्य फ़ंक्शन में डालने से फ़ंक्शन को कॉल करें? यह बहुत साफ डिजाइन के लिए बना देगा।

अर्थात

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

?

0

आप आमतौर पर से जो अंदर आप स्रोत के रूप में विधि (या अशक्त स्थिर हो) फोन वस्तु का उपयोग करें। और विधि के लिए प्रासंगिक कुछ के लिए ElapsedEventArgs सेट करें। क्या तुम सच में स्रोत या विधि के अंदर ई का उपयोग नहीं करते आप अशक्त तर्क के साथ यह कॉल कर सकते हैं new ElapsedEventArgs() { SignalTime = DateTime.Now}

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

: ElapsedEventArgs के लिए यह की तरह कुछ होगा।

KillZombies(null, null); 
0

तकनीकी रूप से, आप ईवेंट हैंडलर अंदर से कार्य को अलग किया जाना चाहिए और ईवेंट हैंडलर विधि कोड आप चलाना चाहते हैं, इस तरह से आप ईवेंट हैंडलर ट्रिपिंग के बिना कि कोड कॉल कर सकते हैं युक्त फोन है। हालांकि, आप प्रोग्राम ईवेंट हैंडलर ट्रिप करना चाहते हैं:

KillZombies(this, new ElapsedEventArgs()) 

मैं हालांकि इसे बाहर टूट जाएगा एक अक्सर इस्तेमाल सबसे अच्छा अभ्यास है के रूप में ...

+0

यह 'ElapsedEventArgs' के रूप में काम नहीं करता है कोई रचनाकार परिभाषित नहीं है। – Otiel

संबंधित मुद्दे