2011-12-23 14 views
19

सी # में हमें इंटरफ़ेस की विधि के पैरामीटर का नाम देना होगा।हमें इंटरफ़ेस विधि पैरामीटर का नाम क्यों देना है?

मैं समझता हूँ कि हम, करने के लिए ऐसा करने में मदद मिलेगी एक पाठक अर्थ समझ में नहीं था, भले ही, हालांकि कुछ मामलों में यह वास्तव में जरूरत नहीं है:

interface IRenderable 
{ 
    void Render(GameTime); 
} 

मैं कहूंगा कि इसके बाद के संस्करण के रूप में पढ़ी जा सकती है और सार्थक नीचे के रूप में:

interface IRenderable 
{ 
    void Render(GameTime gameTime); 
} 

वहाँ कुछ तकनीकी कारण है कि एक इंटरफेस पर तरीकों के मापदंडों के लिए नामों की आवश्यकता है है?


यह ध्यान देने योग्य है कि इंटरफ़ेस विधि के क्रियान्वयन इंटरफेस की विधि में उन लोगों के लिए अलग-अलग नाम का उपयोग कर सकते लायक है।

+0

मुझे लगता है कि विधि हस्ताक्षर के नाम होगा संगत !!! –

+0

मेरी संपादित अंतिम टिप्पणी देखें। –

+1

क्या मैं की बात कर रहा हूं विधि घोषणाओं की तरह भर में लगातार कर रहे हैं - वर्गों और इंटरफेस ... –

उत्तर

19

वैकल्पिक पैरामीटर का उपयोग संभवतः एक संभावित कारण हो सकता है।

यदि हम एक इंटरफ़ेस का उपयोग कर रहे थे, इसे नाम दिया है पैरामीटर मान निर्दिष्ट करने के लिए असंभव हो जाएगा। एक उदाहरण:

interface ITest 
{ 
    void Output(string message, int times = 1, int lineBreaks = 1); 
} 

class Test : ITest 
{ 

    public void Output(string message, int numTimes, int numLineBreaks) 
    { 
     for (int i = 0; i < numTimes; ++i) 
     { 
      Console.Write(message); 
      for (int lb = 0; lb < numLineBreaks; ++lb) 
       Console.WriteLine(); 
     } 

    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     ITest testInterface = new Test(); 
     testInterface.Output("ABC", lineBreaks : 3); 
    } 
} 

इस कार्यान्वयन में, जब इंटरफ़ेस का उपयोग कर, वहाँ times और lineBreaks पर डिफ़ॉल्ट पैरामीटर हैं, इसलिए इंटरफेस के माध्यम से पहुँचने के हैं, तो यह नाम वाले पैरामीटर के बिना, चूक उपयोग करना संभव है, हम होगा times पैरामीटर को छोड़ने में असमर्थ और केवल lineBreaks पैरामीटर निर्दिष्ट करें।

बस एक FYI करें, आप इंटरफेस के माध्यम से या वर्ग के माध्यम से Output विधि एक्सेस कर रहे हैं कि क्या पर निर्भर करता है निर्धारित करता है कि डिफ़ॉल्ट पैरामीटर उपलब्ध हैं, और क्या उनके मूल्य है।

+0

इंटरफेस वैकल्पिक और नाम वाले पैरामीटर से पहले थे। :) – CodeCaster

+0

@ कोडकस्टर अच्छा चिल्लाओ, संभवतः मूल कारण नहीं है, हालांकि यह निश्चित रूप से एक कारण है :) मुझे लगता है कि भविष्य की विशेषताओं की संभावना इस तरह थी क्योंकि उन्होंने उन्हें नाम दिया था। – Lukazoid

+0

@ लुकाज़ॉयड, अच्छी तरह से किया गया। यह सबसे तार्किक उत्तर है जिस तरह से आप इसे देखते हैं। –

9

मैं किसी भी कारण है कि यह एक तकनीकी आवश्यकता बनाना होगा नहीं दिख रहा। लेकिन मैं एक विशेष रूप से अच्छा कारण के बारे में सोच सकते हैं:

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

+0

प्लस यह कक्षाओं में विधि घोषणाओं के अनुरूप बना देता है। – Thilo

+2

"कठिनाई की कल्पना करें यदि कोई पैरामीटर सार्थक नाम नहीं था!" - बस ग्रहण में कुछ जावा लिखते हैं, सबसे पैरामीटर नामों के रूप में "arg0" आदि दिखाए जाते हैं ... – Adam

+1

कि @codesparkle एक न्यूनतम किया गया JavaScript फ़ाइल के माध्यम से पढ़ने के रूप में के रूप में ज्यादा मज़ा लगता है! –

0

ठीक है, इस संभावना को लगभग भी तुच्छ लगता है, लेकिन - हो सकता है इसलिए जब आप दृश्य स्टूडियो इंटरफेस और गुण और विधियों में ठूंठ को लागू करते हैं, यह जानता है क्या पैरामीटर नाम है?

दूसरी ओर, वी.एस. कोई समस्या सामान्य रूप से नियंत्रण नामकरण ...

1

मैं किसी भी वैध तकनीकी कारण इंटरफेस परिभाषित नाम है करने के लिए है कि सोच भी नहीं सकते हैं।

मैं आसानी से एक स्थिति देख सकते हैं, जहां नाम स्वत: लागू किया ऑटो कार्यान्वित संपत्तियों के लिए समर्थन के सदस्यों की तरह हैं आज कर रहे हैं।

हालांकि, मुझे लगता है कि शायद 3 मुख्य कारणों क्यों वे की जरूरत किया गया है कि:

1) यह शायद काफी हद तक आसान संकलक में इंटरफ़ेस सत्यापन वास्तविक तरीके के रूप में एक ही नियमों का उपयोग कर लागू करने के लिए किया गया था। चूंकि यह केवल अपेक्षाकृत अपेक्षाकृत था कि ऑटो-कार्यान्वित गुण पेश किए गए थे, मुझे संदेह है कि यह एक गैर-तुच्छ संकलक परिवर्तन है।

2) उन भाषाओं के लिए जो कार्यान्वयन वर्ग (यानी वीबी) में इंटरफेस सदस्यों के ऑटो-सृजन का समर्थन करते हैं, फ्लाई पर नाम बनाने की कोशिश करने से पूर्व परिभाषित नामों का उपयोग करके इंटरफ़ेस कार्यान्वयन करना संभवतः संभव है ।

3) एक इंटरफेस को परिभाषित आवेदन के बाहर उजागर किया जा सकता है के बाद से, नाम एक ख़राब ढंग से परिभाषित इंटरफेस के साथ जुड़े अस्पष्टता को हटा दें।

उदाहरण के लिए, के लिए एक इंटरफेस विधि को लागू करने का प्रयास:

void Foo(string, string, int) 

चाहेंगे सबसे अधिक संभावना अपने स्वयं का दस्तावेजीकरण उदाहरण की तुलना में काफी अधिक भ्रम हो। हालांकि, यह तकनीकी रूप से एक इंटरफेस उपयोगिता मुद्दा वास्तव में अधिक है, हालांकि कोई तर्क दे सकता है कि यदि इंटरफ़ेस अनुपयोगी है, तो अंतर्निहित तकनीकी समस्या है।

2

नामकरण इंटरफ़ेस विधि parametres स्वयं प्रलेखन के साथ मदद करता है:

उदाहरण के लिए ...

interface IRenderable 
{ 
    void Render(TimeSpan gameTime); 
} 

... कहते हैं और अधिक से अधिक:

interface IRenderable 
{ 
    void Render(TimeSpan); 
} 
संबंधित मुद्दे