2013-03-13 7 views
15

इंटरफ़ेस फ़ंक्शन का रिटर्न प्रकार हो सकता है। यदि हां तो क्या फायदा है। जैसे निम्नलिखित कोड सही है जहां इंटरफ़ेस की सरणी वापस आ रही है।इंटरफ़ेस वापसी प्रकार

public interface Interface 
{ 
    int Type { get; } 
    string Name { get; } 
} 

public override Interface[] ShowValue(int a) 
{ 
. 
. 

} 
+4

(1) हां। (2) क्योंकि यह polymorphic व्यवहार की अनुमति देता है। की –

+0

संभव डुप्लिकेट [सी # - सूची या IList ] (http://stackoverflow.com/questions/400135/c-sharp-listt-or-ilistt) की [सूची या IList ] (https – ken2k

+0

संभावित डुप्लिकेट: //stackoverflow.com/questions/400135/listt-or-ilistt) – Squazz

उत्तर

16

हां, आप एक इंटरफ़ेस वापस कर सकते हैं।

की कक्षाओं का कहना है A और B चलो प्रत्येक लागू इंटरफ़ेस Ic:

public interface Ic 
{ 
    int Type { get; } 
    string Name { get; } 
} 

public class A : Ic 
{ 
    . 
    . 
    . 
} 

public class B : Ic 
    . 
    . 
    . 
} 

public Ic func(bool flag) 
{ 
    if (flag) 
     return new A(); 
     return new B(); 

} 

इस उदाहरण func में कारखाना विधि — यह विभिन्न वस्तुओं लौट सकते हैं की तरह है!

+0

क्या मैं इंटरफ़ेस की वापसी की व्याख्या कर सकता हूं "आईसी लागू करने वाली ऑब्जेक्ट लौटाएं"? यह मेरे लिए बहुत भ्रमित है क्योंकि हम इंटरफ़ेस का उदाहरण नहीं बना सकते हैं लेकिन हम एक को वापस कर सकते हैं। –

8

हां यह कर सकता है।

लाभ यह है कि आप वापसी (और इनपुट) प्रकारों को सार कर सकते हैं।

public interface IFruit{ } 

public class Apple: IFruit{} 

public class Pear: IFruit{} 

... 

public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){ 
    // this function can return Apple, Pear 
} 
5

हाँ यह संभव है, और यह सार्वजनिक कार्यों के लिए एक अच्छी बात है।

लिए क्यों अपने प्रश्न, मैं नकल नहीं होगा, अन्य लोगों को जवाब पेस्ट इसलिए मौजूदा जवाब का संदर्भ लें, उदाहरण के लिए की हिस्सा:

+0

यदि आपको एक ही विषय पर अन्य प्रश्न/उत्तर मिलते हैं, तो यह बेहतर होगा [डुप्लिकेट के रूप में बंद करें] (http: // stackoverflow। com/faq # close) अन्य पदों को जोड़ने के बजाय? –

+0

@ChaseFlorell निश्चित रूप से।असल में मैं अपना खुद का जवाब लिख रहा था और * तब * एहसास हुआ कि इसका उत्तर पहले से ही दिया जा सकता है, इसलिए मैंने अपना खुद का टेक्स्ट साफ़ कर दिया और बदले में कुछ सहायक लिंक जोड़े ... लेकिन वैसे भी डुप्लिकेट के रूप में बंद करने के लिए मतदान करना। – ken2k

17

हां interface एक बहुत ही वैध वापसी मूल्य है। याद रखें, आप इंटरफेस की परिभाषा वापस नहीं कर रहे हैं, बल्कि उस इंटरफ़ेस के इंस्टेंस

public interface ICar 
{ 
    public string Make { get; } 
} 

public class Malibu : ICar 
{ 
    public string Make { get { return "Chevrolet"; } } 
} 

public class Mustang : ICar 
{ 
    public string Make { get { return "Ford"; } } 
} 

अब आप अलग अलग ICar उदाहरणों को अपने स्वयं के संबंधित मूल्यों है कि के एक नंबर लौट सकता है:

लाभ बहुत स्पष्ट है, निम्नलिखित कोड पर विचार करें।

लेकिन, इंटरफेस प्रयोग करने के लिए प्राथमिक कारण है, ताकि वे एक प्रसिद्ध अनुबंध में विधानसभाओं के बीच साझा किया जा सकता है, ताकि जब आप किसी एक ICar गुजरती हैं, वे इसके बारे में कुछ नहीं पता है, लेकिन वे जानते हैं कि यह है एक Make। इसके अलावा, वे सार्वजनिक इंटरफेस को छोड़कर इसके खिलाफ कुछ भी निष्पादित नहीं कर सकते हैं। तो यदि Mustang में public सदस्य Model नामित सदस्य थे, तो वे तब तक नहीं पहुंच पाए जब तक यह इंटरफ़ेस में नहीं था।

+0

यह मेरे लिए बहुत भ्रमित है क्योंकि हम एक इंटरफ़ेस का उदाहरण नहीं बना सकते हैं लेकिन हम एक इंटरफेस का एक उदाहरण वापस कर सकते हैं। क्या आपका मतलब किसी ऑब्जेक्ट का एक उदाहरण लौटाया गया है जिसने इंटरफेस को कार्यान्वित किया है? –

संबंधित मुद्दे