व्यक्तिगत रूप से, मुझे कक्षा के भीतर निजी सदस्य तक पहुंचने में कुछ भी गलत नहीं लगता है। असल में मैं आमतौर पर ऐसा करता हूं (जब तक संपत्ति गेटटर/सेटर में तर्क नहीं होता है जिसे मैं हमेशा लाभ उठाना चाहता हूं)।
यह सिर्फ मुझे समझ में आता है: कक्षा के भीतर कोड उस वर्ग के कार्यान्वयन का गठन करता है; खुद से एक कार्यान्वयन क्यों छुपाएं?
मेरा मतलब यह है कि मेरा क्या मतलब है। मान लीजिए मैं कुछ सदस्य, m_denominator
है, और मैं इसे शून्य होने के लिए कभी नहीं चाहते:
private int m_denominator = 1;
public int Denominator
{
get { return m_denominator; }
set
{
if (value == 0)
throw new ArgumentException("Denominator must not be zero.");
m_denominator = value;
}
}
मैं अपने आप से कह सकते हैं: "ठीक है, हर जगह मैं इस वर्ग के भीतर यह मान, मुझे यकीन है कि बनाने के लिए Denominator
का उपयोग करना चाहिए सेट मैं मैं इसे शून्य पर सेट नहीं कर रहा हूं। " लेकिन मैं पूरी तरह से नियंत्रण में हूं कि मैं Denominator
पर सेट कर रहा हूं - मैं कक्षा के अंदर हूं!में परिदृश्य, Denominator
संपत्ति में तर्क का बिंदु क्लाइंट कोड द्वारा निर्धारित अमान्य मानों से कक्षा को सुरक्षित करना है। कक्षा के कार्यान्वयन के भीतर अपने आंतरिक राज्य को कुछ अमान्य मूल्य पर सेट करने का कोई बहाना नहीं है।
बेशक यह एक पूर्ण नियम नहीं है। निश्चित रूप से ऐसे समय होते हैं जब किसी वर्ग के भीतर अपने तर्क के लिए संपत्ति का उपयोग सुरक्षात्मक उपाय के रूप में एक समझदार विकल्प हो सकता है; वास्तव में, मैं सिर्फ बहस कर रहा हूं कि किसी वर्ग के भीतर से निजी सदस्यों तक पहुंचने के लिए गलत नहीं है।
स्रोत
2010-07-16 14:12:55
ध्यान देने योग्य एक बात - भले ही आप .NET 2.0 को लक्षित कर रहे हों, यदि आप ऐसा करने के लिए C# 3 का उपयोग कर रहे हैं, तो भी आप स्वचालित गुणों का उपयोग कर सकते हैं। उन्हें किसी भी ढांचे के समर्थन की आवश्यकता नहीं है। –
@ जोन - यह शायद टिप्पणी के बजाय उत्तर देने के लिए पर्याप्त जानकारी है। – tvanfosson
@tvanfosson - मैं सहमत हूं, इसके बारे में कोई जानकारी नहीं थी! – adamwtiko