2009-06-08 7 views
5

मान लें कि मैं एक वर्ग है कि निम्न इवेंट को उजागर करता है:नामकरण तरीकों कि घटनाओं के लिए पंजीकृत हैं

public event EventHandler Closing 

तरीकों कि इस घटना के लिए पंजीकृत हैं कैसे नामित किया जाना चाहिए? क्या आप उस सम्मेलन का पालन करना पसंद करते हैं जो विजुअल स्टूडियो का उपयोग करता है जब यह उत्पन्न करने वाले तरीकों के नाम निर्दिष्ट करता है (उर्फ। + =, टैब, टैब)? उदाहरण के लिए:

private void TheClass_Closing(object sender, EventArgs e) 

या आप इन तरीकों का नाम देने के लिए अपनी शैली का उपयोग करते हैं?

मैंने इन विधियों को नाम देने के विभिन्न तरीकों की कोशिश की है (जैसे TheClassClosing, HandleClosing, आदि)। लेकिन मुझे यह इंगित करने के लिए एक अच्छी शैली नहीं मिली है कि एक विधि का इरादा एक पंजीकृत घटना को संभालना है। मैं व्यक्तिगत रूप से स्टाइल (अंडरस्कोर) पसंद नहीं करता हूं कि विजुअल स्टूडियो विधि नाम उत्पन्न करने के लिए उपयोग करता है।

मुझे पता है कि पंजीकृत घटना से निपटने के तरीकों हमेशा निजी होती हैं और तरीकों कि घटनाओं जुटाने के लिए एक तरह कोई नामकरण परंपरा है कि वहाँ (जैसे, OnClosing)।

+0

जबकि इस प्रश्न में "रजिस्टर" क्रिया का प्रयोग किया जाता है, माइक्रोसॉफ्ट अक्सर क्रिया ["सदस्यता लें"] (https://msdn.microsoft.com/en-us/library/ms366768.aspx) – DavidRR

उत्तर

2

नामकरण के लिए दो आम विकल्प है या तो क्या विधि करता है के बाद:

theObject.Closing += SaveResults; 

या वैकल्पिक रूप से क्या विधि संभालती के बाद:

theObject.Closing += ClosingHandler; 

कौन वास्तव में पसंद किया जाता है एक सा निर्भर करता है संदर्भ पर

पहले मामले में यह तुरंत स्पष्ट हो जाता है कि हैंडलर क्या करने जा रहा है, जो हैंडलर को अधिक पठनीय करने के लिए कोड को पंजीकृत करता है ... लेकिन हैंडलर SaveResults को अलगाव में देखकर यह स्पष्ट रूप से स्पष्ट नहीं होगा को तब तक बुलाया जा रहा है जब तक कि ईवेंट तर्कों का स्पष्ट नाम न हो (ClosingEventArgs या कुछ ऐसे)।

दूसरे मामले में, पंजीकरण अधिक अपारदर्शी है (ठीक है, तो क्या होगा जब Closing होता है?), लेकिन दूसरी ओर, हैंडलर कार्यान्वयन को देखते हुए यह स्पष्ट होगा कि क्या हो रहा है।

मुझे लगता है कि यह चुनने के लिए कि आप दोनों में से कौन सा स्पष्ट होना चाहते हैं; पंजीकरण की साइट, या हैंडलर के कार्यान्वयन।

या वैकल्पिक रूप से, आप दोनों तरीकों में से अपवित्र संयोजन के लिए जा सकते हैं:

theObject.Closing += ClosingHandlerSaveResults; 

अब दोनों पंजीकरण साइट और कार्यान्वयन समान रूप से स्पष्ट हैं, और न ही (प्लस, यह शायद सूखी उल्लंघन करता है, विशेष रूप से सुंदर लग रहा है सिद्धांत)।

रिकॉर्ड के लिए मैं पहली बार नामकरण योजना जब theObjectSaveResults के कार्यान्वयन से एक अलग दायरे में निहित है, और दूसरी योजना जब मैं घटनाओं है कि सभी एक ही कक्षा के भीतर समाहित कर रहे हैं करने के लिए संचालकों तारों रहा पसंद करते हैं।

0

मैं अपने स्टूडियो स्टूडियो (+, =, टैब, टैब का उल्लेख) द्वारा बनाए गए लोगों के समान ही मेरे ईवेंट हैंडलर का नाम देता हूं। मैं अपने कोडिंग को अपने कोड में सुसंगत रखने की कोशिश करता हूं, और मुझे पता है कि मैं कम से कम कुछ समय में वीएस ऑटो-निर्माता के साथ हैंडलर बनाउंगा।

अंडरस्कोर मुझे परेशान नहीं करते हैं।

0

शायद: OnObjectNameEventName, इस तरह के

private void OnTheClassClosing(object sender, EventArgs e) 

के रूप में यह आंतरिक घटना तरीकों से मेल खाता है, और ऑब्जेक्ट नाम के अलावा के साथ, यह अंतर करने में सहायता चाहिए, इसके अलावा, विधि को बढ़ाने के लिए घटनाओं को अनिवार्य रूप से आंतरिक ईवेंट हैंडलर्स हैं

उपयोगकर्ता क्लिक फॉर्म, फॉर्म कॉल ऑनक्लिटेड, इसकी बात करता है, फिर क्लिक किए गए ईवेंट को बढ़ाता है, यह केवल मेरे दृष्टिकोण से प्राकृतिक होगा।

+1

का उपयोग करता है एमएफसी, "ऑनसोमेंट" शैली कई प्रोग्रामर (स्वयं शामिल) में शामिल है। दुर्भाग्यवश माइक्रोसॉफ्ट ने इसका अर्थ "एक घटना प्राप्त करने" के बजाय "एक ईवेंट भेजें" के अर्थ को बदलने का फैसला किया, जो बहुत से .NET कोड को अनावश्यक रूप से भ्रमित कर देता है। अब मैं एक घटना भेजने के लिए RaiseSomeEvent का उपयोग करता हूं, और गंदा लेकिन स्पष्ट Sender_EventName() सम्मेलन अपनाया है। मैं ऐसे मामले में Many_EventName() का उपयोग करता हूं जहां एक ईवेंट हैंडलर अधिक प्रेषक से जुड़ा होता है। –

+0

@ जेसन: तो जब आप किसी अन्य प्रेषक से जुड़ने का निर्णय लेते हैं, तो आपको अपनी विधि का नाम बदलना होगा? मुझे RaiseSomeEvent नाम पसंद है हालांकि ... शायद मैं OnSomeEvent की बजाय इसका उपयोग करना शुरू कर दूंगा ... हमेशा बाद में थोड़ा सा पाया ... गलत ... – Svish

3

हैंडलर वास्तव में क्या करता है उसके बाद इसे नाम दें।

// event += event handler 
saveButton.Click += SaveData(); 
startButton.Click += StartTheTimer(); 
+1

मुझे यह देखकर खुशी हो रही है कि मैं अकेला नहीं हूं यह कौन करता है विधियों को यह कहना चाहिए कि वे क्या करते हैं, न कि उनका उपयोग कैसे किया जाता है। यह घटना स्पष्ट करने के लिए इवेंट तारों का काम है :) –

+1

@ डेविड आरआर: वैसे यह प्रतिनिधियों को नाम देने पर मार्गदर्शन है - जो इन दिनों शायद ही कभी 'EventHandler ' के साथ प्रासंगिक है। मैं निश्चित रूप से बनाए गए हर कार्यक्रम के लिए एक अलग प्रतिनिधि प्रकार नहीं चाहता हूं। ओपी का सवाल प्रतिनिधि को नाम देने के बारे में नहीं पूछता है, क्योंकि वे 'EventHandler' का उपयोग कर रहे हैं। असल में मुझे लगता है कि आपका उत्तर उस प्रश्न का उत्तर नहीं है जिसे पूछा गया है ... –

+0

जोन की टिप्पणी को संदर्भित करने के लिए जो मैंने हटा दिया है, उसके उत्तर के जवाब में, माइक्रोसॉफ्ट [नामकरण ** घटना के लिए मार्गदर्शन प्रदान करता है हैंडलर ** (प्रतिनिधियों के प्रकार के रूप में उपयोग प्रतिनिधियों)] (https://msdn.microsoft.com/en-us/library/ms229012%28v=vs.110%29.aspx)। लेकिन इस संदर्भ में उपयोग किए जाने वाले "इवेंट हैंडलर" शब्द को * एक * विधि के समान नहीं है जो किसी ईवेंट में सदस्यता (पंजीकृत) है। – DavidRR

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