2009-07-13 14 views
9

क्या एक घटना परिभाषा के लिए बेहतर शैली माना जाता है:सी # लड़ाई/प्रतिनिधि शैली प्रश्न

public event Action<object, double> OnNumberChanged; 

या

public delegate void DNumberChanged(object sender, double number); 
public event DNumberChanged OnNumberChanged; 

पहले कम लिख कर लेता है, लेकिन प्रतिनिधि एक पैरामीटर के नाम देता है। जैसा कि मैंने यह टाइप किया है, मुझे लगता है कि नंबर 2 विजेता है, लेकिन मैं गलत हो सकता हूं।

संपादित करें: एक अलग (तीसरा) दृष्टिकोण विजेता है। नीचे दिया गया पढ़ें।

+1

नीचे उल्लेख किया है, eventhandler के उपयोग स्पष्टता के लिए सबसे अच्छा है

मैं एक वर्ग है। इसके लायक होने के लिए, मैं कोडप्लेक्स पर होस्ट की गई लाइब्रेरी को बनाए रखता हूं जो आपको EventHandler एक्शन और इसके विपरीत के रूपांतरित करने की अनुमति देगा। अधिक जानकारी के लिए http://jolt.codeplex.com/Wiki/View.aspx?title=Jolt.Functional देखें। –

+0

@ ब्रैड ब्रूस, वह उत्तर अनुक्रम का जिक्र नहीं कर रहा है, लेकिन एक तीसरी तकनीक अपने मूल 2 विचारों से अलग है। मैंने प्रश्न का खुलासा किया है और थोड़ा स्पष्ट जवाब देने के लिए स्वीकार किया है। – Aardvark

उत्तर

16

न तो 1 या 2. एक तीसरा विकल्प विजेता

public event EventHandler<NumberChangedEventArgs> NumberChanged; 

आप इस तरह के घटना args कि EventArgs विस्तार नहीं करता है के लिए एक प्रकार का उपयोग कर के रूप में सी # में विकसित करने के लिए शैली दिशा निर्देशों के एक नंबर को तोड़ने के कर रहे हैं, है ।

हां, आप इसे इस तरह से कर सकते हैं, क्योंकि संकलक परवाह नहीं है। हालांकि, आपके कोड को पढ़ने वाले लोग डब्ल्यूटीएफ करेंगे।

+0

+1। मैं सिर्फ यह जोड़ना चाहता हूं कि संपत्ति परिवर्तन अधिसूचना ईवेंट के लिए कस्टम इवेंटअर्ग की आवश्यकता नहीं हो सकती है, क्योंकि परिवर्तन पहले से प्रेषक की संपत्ति के माध्यम से प्रतिबिंबित होना चाहिए था। – tia

11

यदि आपको ऐसा करने की ज़रूरत नहीं है तो नया प्रकार न बनाएं। मुझे लगता है कि यह बेहतर है:

public event Action<object, double> OnNumberChanged; 

कारण यह है कि Action और Func प्रतिनिधि परिवारों मौजूद यह बहुत ही उद्देश्य पूरा और डेवलपर्स द्वारा नए प्रतिनिधि प्रकार निर्माण के लिए की जरूरत को कम किया जा सके।

+0

इस के साथ सहमत हैं, बनाए रखने के लिए कोड की एक कम लाइन। –

0

मुझे लगता है कि अगर मैं चुनना चाहता हूं तो विकल्प 1 बेहतर होता है, लेकिन आईआईआरसी, घटनाओं के लिए आधिकारिक दिशानिर्देश बताते हैं कि आपका दूसरा पैरामीटर XxxEventArgs नाम के साथ एक वर्ग होना चाहिए, और EventArgs अपनी विरासत श्रृंखला में होना चाहिए।

+1

हाँ आप सही हैं। वे यह भी सलाह देते हैं कि आप "ऑन" नाम से ईवेंट शुरू नहीं करते हैं, लेकिन आप इसे सुरक्षित विधि के लिए आरक्षित करते हैं जिसका उपयोग आपके ईवेंट को बढ़ाने के लिए किया जाता है।शैली दिशानिर्देश संदर्भ के लिए –

1

कोडिंग शैली के बारे में सभी प्रश्नों के साथ। अपनी पसंद के किसी को चुनें, या आपकी टीम पसंद करती है, और इसे पूरे प्रोजेक्ट में सुसंगत रखती है। जब तक हर किसी को इसे कुशलता से पढ़ना आवश्यक हो, तब तक आप ठीक होंगे।

2

आम तौर पर मैं तर्क के रूप में एक EventArgs व्युत्पन्न कक्षा का उपयोग करने के लिए चिपक जाता हूं। यह कोड को और अधिक संगत बनाता है।

public class ApplyClickedEventArgs : EventArgs 
{ 
    ... 
} 

और हैंडलर:

void cpy_ApplyClicked(object sender, ApplyClickedEventArgs e) 
{ 
    ... 
} 

घोषणा है:

public event EventHandler<ApplyClickedEventArgs> ApplyClicked; 
संबंधित मुद्दे