ऐसा तब करना अच्छा होता है जब सदस्य संदर्भ में व्यर्थ होता है। उदाहरण के लिए, यदि आप एक आसानी से संग्रह बनाते हैं जो IList<T>
किसी आंतरिक वस्तु को सौंपकर लागू करता है _wrapped
तो आपके पास कुछ ऐसा हो सकता है:
public T this[int index]
{
get
{
return _wrapped[index];
}
}
T IList<T>.this[int index]
{
get
{
return this[index];
}
set
{
throw new NotSupportedException("Collection is read-only.");
}
}
public int Count
{
get { return _wrapped.Count; }
}
bool ICollection<T>.IsReadOnly
{
get
{
return true;
}
}
यहां हमें चार अलग-अलग मामले मिले हैं।
public T this[int index]
इंटरफ़ेस के बजाय हमारी कक्षा द्वारा परिभाषित किया गया है, और इसलिए निश्चित रूप से एक स्पष्ट कार्यान्वयन नहीं है, हालांकि ध्यान दें कि यह T this[int index]
इंटरफ़ेस में परिभाषित रीड-राइट के समान होता है लेकिन केवल-पढ़ने के लिए होता है।
T IList<T>.this[int index]
स्पष्ट है क्योंकि इसका एक हिस्सा (गेट्टर) ऊपर की संपत्ति से पूरी तरह से मेल खाता है, और दूसरा हिस्सा हमेशा एक अपवाद फेंक देगा। हालांकि इंटरफ़ेस के माध्यम से इस वर्ग के उदाहरण तक पहुंचने वाले किसी व्यक्ति के लिए, यह वर्ग के प्रकार के एक चर के माध्यम से इसका उपयोग करने वाले व्यक्ति के लिए व्यर्थ है।
इसी तरह क्योंकि bool ICollection<T>.IsReadOnly
हमेशा सही होने वाला होता है, यह कोड के लिए पूरी तरह से व्यर्थ है जो वर्ग के प्रकार के खिलाफ लिखा जाता है, लेकिन इंटरफ़ेस के प्रकार के माध्यम से इसका उपयोग करना महत्वपूर्ण हो सकता है, और इसलिए हम इसे स्पष्ट रूप से लागू करते हैं।
इसके विपरीत, public int Count
स्पष्ट रूप से लागू नहीं किया जाता है क्योंकि यह संभावित रूप से किसी का उपयोग करके अपने स्वयं के प्रकार के माध्यम से हो सकता है।
लेकिन आपके "बहुत कम उपयोग किए जाने वाले" मामले के साथ, मैं एक स्पष्ट कार्यान्वयन का उपयोग नहीं करने की दिशा में वास्तव में बहुत दृढ़ता से झुकूंगा।
उन मामलों में जहां मैं कक्षा के प्रकार के एक चर के माध्यम से एक स्पष्ट कार्यान्वयन कॉलिंग विधि का उपयोग करने की सिफारिश करता हूं, या तो एक त्रुटि होगी (अनुक्रमित सेटर का उपयोग करने का प्रयास) या निरर्थक (एक मान की जांच करना जो हमेशा समान रहेगा) इसलिए छिपाने में उन्हें आप उपयोगकर्ता को छोटी गाड़ी या उप-इष्टतम कोड से बचा रहे हैं। आपको लगता है कि कोड के लिए यह काफी अलग है शायद ही कभी इस्तेमाल होने की संभावना हो । उसके लिए मैं EditorBrowsable
सदस्य से अंतरंगता को छिपाने के लिए विशेषता का उपयोग करने पर विचार कर सकता हूं , हालांकि यह भी कि मैं थका हुआ हूं; लोगों के दिमाग के पास पहले से ही फ़िल्टर करने के लिए अपना सॉफ़्टवेयर है जो उन्हें ब्याज नहीं देता है।