पहली बात यह है कि आप अपने आप से पूछना होगा यह है:
"अगर मैं आईडी == 53 के साथ दो उपकरणों है, तो इसका मतलब यह है कि वे निश्चित रूप से एक ही उपकरण हैं, कोई बात नहीं क्या या कोई है? सार्थक मामला जहां वे अलग हो सकते हैं? "
जवाब मानते हुए "वे दोनों एक जैसे हैं। यदि कोई अन्य संपत्ति अलग है, तो यह एक बग है या क्योंकि एक ऐसी वस्तु किसी अन्य के बाद प्राप्त की गई थी, और यह जल्द ही पर्याप्त हो जाएगा (जब भी प्रसंस्करण का धागा होता है पुराने उपकरण का उपयोग करके, इसका उपयोग बंद कर देता है) "फिर:
सबसे पहले, आंतरिक रूप से, जो कुछ भी आपको आसान लगता है उसका उपयोग करें। आपको लगता है कि यह हर समय int
द्वारा जाना होगा, हालांकि आपको कुछ प्रकार की सुरक्षा मिलती है कि Instrument
विधि को पास कर दिया गया है। यह विशेष रूप से सच है यदि सभी Instrument
निर्माण internal
या private
कारखाने के तरीकों के माध्यम से उपयोग किए गए कन्स्ट्रक्टर से होता है, और कोड के उपयोगकर्ता के लिए एक कोड के साथ Instrument
बनाने के लिए कोई तरीका नहीं है जो आपके सिस्टम में कुछ भी मेल नहीं खाता है।
जैसे समानता को परिभाषित करें:
public class Instrument : IEquatable<Instrument>
{
/* all the useful stuff you already have */
public bool Equals(Instrument other)
{
return other != null && Id == other.Id;
}
public override bool Equals(object other)
{
return Equals(other as Instrument);
}
public override int GetHashCode()
{
return Id;
}
}
अब, खासकर जब हम विचार है कि इसके बाद के संस्करण समय के सबसे inlined होने की संभावना है, वहाँ काफी है कि क्या हम आईडी का उपयोग करने के लिए या के रूप में कोई अंतर नहीं है कार्यान्वयन समानता के मामले में वस्तु, और इसलिए उन्हें एक कुंजी के रूप में उपयोग करने के मामले में भी।
public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
return instrumentInfos[instrument];
}
या::
public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
return instrumentInfos[instrument.Id];
}
या:
public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
return GetInstrumentInfo(instrument.Id);
}
private InstrumentInfo GetInstrumentInfo(int instrumentID)
{
return instrumentInfos[instrumentID]
}
प्रदर्शन प्रभाव होगा
अब, आप निम्नलिखित साधन में से किसी में अपने सार्वजनिक विधियों में से सभी को परिभाषित कर सकते वही हो, जो भी आप के लिए जाते हैं। उपयोगकर्ताओं को प्रस्तुत कोड टाइप-सुरक्षित होगा और गारंटी होगी कि वे फर्जी मानों में पास नहीं होते हैं। उठाया गया कार्यान्वयन केवल वही हो सकता है जो आपको अन्य कारणों से अधिक सुविधाजनक लगता है।
चूंकि यह आपको आंतरिक रूप से एक कुंजी के रूप में उपकरण का उपयोग करने के लिए और अधिक खर्च नहीं करेगा, फिर भी मैं आपको सलाह देता हूं कि आप (तीनों विकल्पों में से पहला) टाइप-सुरक्षा के रूप में ऐसा करें और इसे कठिन बनाना फर्जी मूल्यों में पास करने के बाद भी आपके आंतरिक कोड पर लागू होगा। यदि दूसरी तरफ आप पाते हैं कि कॉल का एक सेट बस आईडी का उपयोग करते रहें (यदि उदा।वे एक डेटाबेस परत से बात कर रहे हैं जिसके लिए केवल आईडी का अर्थ है), फिर केवल उन स्थानों को बदलना आपके लिए त्वरित और आसान हो जाता है, और उपयोगकर्ता से छिपा हुआ है।
आप अपने उपयोगकर्ताओं को एक कुंजी के रूप में अपनी वस्तु का उपयोग करने और त्वरित समानता तुलना करने की क्षमता भी देते हैं, अगर यह ऐसा करने के लिए उपयुक्त हो।
बहुत अच्छा सवाल है। +1 – Mohayemin
या शायद GetInstrumentInfo उपकरण पर एक विधि होनी चाहिए? –
@ पेरी का एक बहुत अच्छा मुद्दा है। या शायद एक संपत्ति गेटटर अभी भी बेहतर होगा। –