की दुकान
इंटरफेस को समझने का सबसे आसान तरीका यह है कि वे विभिन्न वस्तुओं को COMMON कार्यक्षमता का पर्दाफाश करने की अनुमति देते हैं। यह प्रोग्रामर को एक बहुत ही सरल, छोटा कोड लिखने की अनुमति देता है जो एक इंटरफ़ेस पर प्रोग्राम करता है, तब तक जब तक ऑब्जेक्ट्स उस इंटरफ़ेस को कार्यान्वित करता है, यह काम करेगा।
डाटाबेस प्रदाता:
कई अलग अलग डेटाबेस प्रदाताओं, MySQL, MSSQL, ओरेकल, आदि कर रहे हैं हालांकि सभी डेटाबेस ऑब्जेक्ट्स समान चीज़ें कर सकते हैं ताकि आप डेटाबेस वस्तुओं के लिए कई इंटरफेस मिल जाएगा। यदि कोई ऑब्जेक्ट IDBConnection लागू करता है तो यह ओपन() और बंद() विधियों का खुलासा करता है। इसलिए यदि मैं चाहता हूं कि मेरा प्रोग्राम डेटाबेस प्रदाता अज्ञेयवादी हो, तो मैं इंटरफ़ेस पर प्रोग्राम करता हूं, न कि विशिष्ट प्रदाताओं के लिए।
IDbConnection connection = GetDatabaseConnectionFromConfig()
connection.Open()
// do stuff
connection.Close()
एक इंटरफेस (IDbconnection) अब मैं अपने config में किसी भी डेटा प्रदाता बाहर स्वैप कर सकते हैं करने के लिए प्रोग्रामिंग से देखें, लेकिन मेरे कोड ठीक उसी रहता है। यह लचीलापन बेहद उपयोगी और बनाए रखने में आसान हो सकता है। इसका नकारात्मक पक्ष यह है कि मैं केवल 'जेनेरिक' डेटाबेस ऑपरेशंस कर सकता हूं और प्रत्येक विशेष प्रदाता द्वारा प्रदान की जाने वाली ताकत का पूरी तरह से उपयोग नहीं कर सकता है, क्योंकि प्रोग्रामिंग में सब कुछ आपके पास एक व्यापार बंद है और आपको यह निर्धारित करना होगा कि कौन सा परिदृश्य आपको सबसे ज्यादा लाभ पहुंचाएगा।
संग्रह:
आप लगभग सभी संग्रह इस इंटरफेस IEnumerable कहा जाता है को लागू दिखाई देती है। IENumerable एक IENumerator देता है जिसमें MoveNext(), Current, और रीसेट() है। यह सी # को आपके संग्रह के माध्यम से आसानी से स्थानांतरित करने की अनुमति देता है। ऐसा करने का कारण यह है कि यह आईनेमरेबल इंटरफ़ेस का खुलासा करता है क्योंकि यह पता चलता है कि ऑब्जेक्ट उन तरीकों का खुलासा करता है जिन्हें इसे पार करने की आवश्यकता है। यह दो चीजें करता है। 1) foreach loops अब संग्रह को गणना करने के लिए कैसे पता चलेगा और 2) अब आप अपने संग्रह में शक्तिशाली LINQ exprssions लागू कर सकते हैं। फिर इंटरफेस इतने उपयोगी क्यों हैं क्योंकि सभी संग्रहों में कॉमन में कुछ है, उन्हें स्थानांतरित किया जा सकता है। प्रत्येक संग्रह को एक अलग तरीके से जोड़ा जा सकता है (लिंक्ड लिस्ट बनाम सरणी) लेकिन इंटरफेस की सुंदरता यह है कि कार्यान्वयन इंटरफेस के उपभोक्ता के लिए छुपा और अप्रासंगिक है। MoveNext() आपको संग्रह में अगला आइटम देता है, इससे कोई फर्क नहीं पड़ता कि यह कैसे करता है। बहुत अच्छा, हुह?
बहुरूपता
जब आप अपने स्वयं के इंटरफेस रचना कर रहे हैं आप बस अपने आप को एक सवाल पूछने के लिए है। इन बातों में आम में क्या है? एक बार जब आप ऑब्जेक्ट्स साझा करते हैं, तो आप उन गुणों/तरीकों को एक इंटरफेस में जोड़ देते हैं ताकि प्रत्येक ऑब्जेक्ट इससे प्राप्त हो सके। फिर आप एक इंटरफ़ेस का उपयोग करके कई ऑब्जेक्ट्स के खिलाफ प्रोग्राम कर सकते हैं।
और निश्चित रूप से मुझे अपने पसंदीदा सी ++ पॉलिमॉर्फिक उदाहरण, जानवरों के उदाहरण देना है। सभी जानवर कुछ विशेषताओं को साझा करते हैं। आइए कहें कि वे हिल सकते हैं, बोल सकते हैं, और उनके सभी का नाम है। चूंकि मैंने अभी पहचान की है कि मेरे सभी जानवरों में क्या समान है और मैं उन गुणों को IAnimal इंटरफेस में सार कर सकता हूं। फिर मैं एक भालू वस्तु, एक उल्लू वस्तु, और इस इंटरफेस को लागू करने वाले एक सांप ऑब्जेक्ट बनाता हूं।एक ही इंटरफ़ेस को लागू करने वाले विभिन्न ऑब्जेक्ट्स को एक साथ स्टोर करने का कारण यह है कि इंटरफेस एक आईएस-ए प्रतिलिपि का प्रतिनिधित्व करते हैं। एक भालू आईएस-ए पशु, एक उल्लू आईएस-ए जानवर है, इसलिए यह तब से बनाता है जब मैं उन्हें सभी जानवरों के रूप में एकत्र कर सकता हूं।
var animals = new IAnimal[] = {new Bear(), new Owl(), new Snake()} // here I can collect different objects in a single collection because they inherit from the same interface
foreach (IAnimal animal in animals)
{
Console.WriteLine(animal.Name)
animal.Speak() // a bear growls, a owl hoots, and a snake hisses
animal.Move() // bear runs, owl flys, snake slithers
}
आप देख सकते हैं कि भले ही इन जानवरों एक अलग तरह से प्रत्येक क्रिया को निष्पादित, मैं एक एकीकृत मॉडल में उन सब के खिलाफ कार्यक्रम कर सकते हैं और यह सिर्फ इंटरफेस के कई लाभ में से एक है।
तो फिर इंटरफेस के साथ सबसे महत्वपूर्ण बात यह है कि ऑब्जेक्ट्स में आम बात है ताकि आप उसी तरह से अलग-अलग वस्तुओं के खिलाफ प्रोग्राम कर सकें। समय बचाता है, कई अन्य लाभों के बीच, अधिक लचीला अनुप्रयोग बनाता है, जटिलता/कार्यान्वयन छुपाता है, असली दुनिया की वस्तुओं/स्थितियों को मॉडल करता है।
उम्मीद है कि इससे मदद मिलती है।
यह मदद कर सकता है: इंटरफेस वर्णन * परिधीय * विशेषताओं, सार कक्षाएं * कोर * कार्यों को परिभाषित करती हैं। – Jason
यदि आप अपनी परियोजना को चाहते हैं तो विभिन्न डेटाबेस का समर्थन करना चाहिए। ताकि ग्राहक भविष्य में अपना डेटाबेस बदल सकें, हम इंटरफेस का उपयोग कक्षा फाइल में संपत्ति प्रक्रियाओं को बदलने के साथ करते हैं ........ –
इस प्रश्न के दर्जनों संभावित डुप्लिकेट हैं ... यहां कुछ हैं: [1 ] (http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces), [2] (http://stackoverflow.com/questions/3355408/explaining-interfaces-to -स्ट्यूडेंट्स), [3] (http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them) –