अगर यह एक मूर्खतापूर्ण सवाल है, लेकिन मैं सिर्फ इस पर ध्यान सुनिश्चित नहीं हैं कि: '। MaxRecords'इंटरफ़ेस परिभाषा में पैरामीटर नाम क्यों आवश्यक हैं? मैं कार्यान्वयन
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long sequence, int count);
}
public class ActivityDao : AbstractNHibernateDao<Core.Domain.Activity>, IActivityDao
{
public IList<Activity> GetAllSinceSequence(long sequence, int maxRecords)
{
}
}
मेरी कार्यान्वयन के अंदर मैं अपने दूसरा पैरामीटर कहा जाता है फिर भी, इंटरफ़ेस में, इसे 'गिनती' के रूप में परिभाषित किया गया है। कंपाइलर अभी भी इंटरफ़ेस को कार्यान्वित करने पर विचार करता है, जो कि अच्छा है, लेकिन कुछ अस्पष्टता का कारण बन सकता है। जाहिर है, मुझे दूसरे से मेल खाने के लिए पैरामीटर में से एक का नाम बदलना चाहिए।
मैंने नाम बदलने से पहले थोड़ा सा खेला और कुछ दिलचस्प देखा। मैं के रूप में मेरे इंटरफेस घोषित करने के लिए अनुमति नहीं कर रहा हूँ:
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long, int);
}
यह सिर्फ संकलक सी # symantics के खिलाफ ज्यादा सुरक्षा की भावना है? इंटरफ़ेस की विधि में पैरामीटर नाम कोड को और अधिक पठनीय बनाने के अलावा अन्य उद्देश्य क्या करते हैं? ऐसा लगता है कि अगर पैरामीटर नाम कार्यान्वयन पर मजबूर नहीं होते हैं तो यह अस्पष्टता को आमंत्रित करता है।
आप अधिक अपवर्तनीय हैं। आपके पास अब तक का सबसे अच्छा जवाब है। आपने ओपी के सवाल का संक्षेप में जवाब दिया। – Enigmativity
ठीक है, तरह। उत्तर, स्पष्ट होने पर, वास्तव में मेरी पोस्ट की अंतिम वाक्य को संबोधित नहीं करता है। इस बात की कोई गारंटी क्यों नहीं है कि कार्यान्वयन के दौरान पैरामीटर का नाम दिया जाएगा? यदि एकमात्र इरादा स्वयं दस्तावेज करना और स्पष्ट होना है - तो उस स्पष्टता को कार्यान्वयन के लिए क्यों नहीं लाया जाए? जब मैं वास्तव में 'maxResults' की अपेक्षा करता हूं तो मैं गलती से 'गिनती' स्वीकार करने के रूप में अपनी विधि का विज्ञापन नहीं करना चाहता हूं। –
क्योंकि आप कार्यान्वयन स्तर पर अधिक विशिष्ट आत्म-दस्तावेज़ीकरण चाहते हैं। मान लें कि आपने एक विधि निष्पादन (int operand1, int operand2) के साथ एक IBinaryMathOperation इंटरफ़ेस बनाया है। फिर आपने इंटरफेस को लागू करने वाला एक एडऑपरेशन क्लास लागू किया। एक ऐड विधि में "ऑपरेंड" को विशेष रूप से "जोड़ों" के रूप में जाना जाता है, और आप उन्हें निष्पादित करना चाहते हैं कि निष्पादन() के विशिष्ट कार्यान्वयन में। – KeithS