C# में इंटरफ़ेस क्या है उदाहरण सहित

⚡ स्मार्ट सारांश

C# में इंटरफ़ेस एक कनेक्शन को परिभाषित करता है।tracयह निर्दिष्ट करता है कि किसी क्लास को किन विधियों और गुणों को लागू करना चाहिए, लेकिन वास्तविक कोड प्रदान नहीं करता है। लागू करने वाली क्लास ठोस व्यवहार प्रदान करती है, जिससे असंबंधित प्रकारों में शिथिल युग्मन और बहु-वंशानुक्रम संभव हो पाता है।

  • 🔗 साथtract: एक इंटरफ़ेस उन मेथड और प्रॉपर्टी सिग्नेचर को घोषित करता है जिन्हें प्रत्येक इम्प्लीमेंटिंग क्लास को परिभाषित करना आवश्यक है।
  • कोई कार्यान्वयन नहीं: एक इंटरफ़ेस में केवल घोषणाएँ होती हैं, इसलिए क्लास वास्तविक मेथड कोड लिखती है।
  • 🔑 कीवर्ड: इंटरफ़ेस कीवर्ड टाइप बनाता है, और एक क्लास इसे लागू करने के लिए कॉलन का उपयोग करती है।
  • 🔀 एकाधिक इंटरफेस: एक क्लास कई इंटरफेस को इम्प्लीमेंट कर सकती है, जिससे C# को एक प्रकार की मल्टीपल इनहेरिटेंस मिलती है।
  • इंटरफ़ेस बनाम एब्सtracटी क्लास: इंटरफेस केवल व्यवहार को परिभाषित करते हैं, जबकि एब्सtract क्लास साझा स्टेट और कोड भी रख सकती हैं।
  • 🤖 एआई सहायता: GitHub Copilot इंटरफेस और कार्यान्वयनों को तैयार करता है, और ML.NET पाइपलाइन इंटरफेस-आधारित ट्रांसफार्मर कनेक्शन पर निर्भर करती हैं।tracटीएस।

C# में इंटरफ़ेस

C# में इंटरफ़ेस क्या है?

An इंटरफेस C# में इसका उपयोग किसी क्लास के साथ मिलकर एक कनेक्शन को परिभाषित करने के लिए किया जाता है।tracइंटरफ़ेस एक ऐसा समझौता है जो यह निर्धारित करता है कि क्लास किसी एप्लिकेशन को क्या प्रदान करेगी। इंटरफ़ेस यह परिभाषित करता है कि कोई क्लास कौन से ऑपरेशन कर सकती है। इंटरफ़ेस प्रॉपर्टीज़ और मेथड्स को डिक्लेयर करता है। यह क्लास पर निर्भर करता है कि वह मेथड के कार्य को सटीक रूप से परिभाषित करे।

आइए हमारे कंसोल एप्लिकेशन में क्लासेस को बदलकर इंटरफ़ेस का एक उदाहरण देखें। ध्यान दें कि हम कोड नहीं चलाएँगे क्योंकि ऐसा कुछ भी नहीं है जिसे इंटरफ़ेस का उपयोग करके चलाया जा सके।

C# इंटरफ़ेस उदाहरण

आइए एक इंटरफ़ेस क्लास बनाते हैं। इस क्लास का नाम होगा “Guru99Interface.” हमारी मुख्य क्लास फिर परिभाषित इंटरफ़ेस को विस्तारित करेगी। सारा कोड Program.cs फ़ाइल में लिखा जाना चाहिए।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code स्पष्टीकरण: -

यहां, हम कोड के महत्वपूर्ण खंडों की व्याख्या करते हैं

C# इंटरफ़ेस उदाहरण

  1. सबसे पहले हम “ नामक एक इंटरफ़ेस को परिभाषित करते हैंGuru99इंटरफ़ेस।" ध्यान दें कि "इंटरफ़ेस" कीवर्ड का उपयोग इंटरफ़ेस को परिभाषित करने के लिए किया जाता है।
  2. इसके बाद, हम उन विधियों को परिभाषित कर रहे हैं जिनका उपयोग हमारे इंटरफ़ेस द्वारा किया जाएगा। इस मामले में, हम वही विधियाँ परिभाषित कर रहे हैं जो पहले के सभी उदाहरणों में उपयोग की गई हैं। ध्यान दें कि इंटरफ़ेस केवल विधियों की घोषणा करता है। यह उनमें कोड को परिभाषित नहीं करता है।
  3. फिर हम अपना बनाते हैं Guru99Tutorial क्लास इंटरफ़ेस को एक्सटेंड करती है। यहीं पर हम इंटरफ़ेस में घोषित विभिन्न मेथड्स को परिभाषित करने वाला कोड लिखते हैं। इस प्रकार की कोडिंग से निम्नलिखित कार्य पूरे होते हैं।
    • यह सुनिश्चित करता है कि कक्षा, Guru99Tutorial केवल "SetTutorial" और "GetTutorial" विधियों के लिए आवश्यक कोड ही जोड़ता है, और कुछ नहीं।
    • यह यह भी सुनिश्चित करता है कि इंटरफ़ेस एक धोखेबाज़ की तरह व्यवहार करे।tracटी. द कक्षा समझौते का पालन करना होगाtracतो अगर कॉनtracअगर इसमें "SetTutorial" और "GetTutorial" नाम के दो मेथड होने चाहिए, तो यह ऐसा ही होना चाहिए।

C# इंटरफ़ेस बनाम Abstracटी क्लास

शुरुआती लोगों के लिए एक आम सवाल यह है कि C# इंटरफ़ेस एक इंटरफ़ेस से कैसे अलग होता है। पेटtracटी वर्गदोनों एक शर्त को परिभाषित करते हैं।tracअन्य प्रकार भी इसी का अनुसरण करते हैं, फिर भी वे अलग-अलग डिजाइन लक्ष्यों की पूर्ति करते हैं।

मुख्य अंतर नीचे सूचीबद्ध हैं:

  • कार्यान्वयन: एक इंटरफ़ेस में केवल घोषणाएँ होती हैं, जबकि एक एब्सtracटी क्लास दोनों प्रदान कर सकती हैtracटी सदस्य और पूरी तरह से कार्यान्वित विधियाँ।
  • बहुवंशापचय: एक क्लास कई इंटरफेस को इम्प्लीमेंट कर सकती है लेकिन केवल एक ही एब्सोल्यूट इंटरफेस को इनहेरिट कर सकती है।tracटी क्लास।
  • Estado: एक एब्सtract क्लास में डेटा के साथ फ़ील्ड, कंस्ट्रक्टर और प्रॉपर्टीज़ हो सकती हैं, जबकि एक इंटरफ़ेस इंस्टेंस स्टेट को स्टोर नहीं कर सकता है।
  • पहुँच संशोधक: Abstract क्लास के सदस्य सार्वजनिक, संरक्षित या निजी हो सकते हैं, जबकि क्लासिक इंटरफेस के सदस्य अंतर्निहित रूप से सार्वजनिक होते हैं।
  • उदाहरण: असंबंधित प्रकारों में क्षमता जोड़ने के लिए एक इंटरफ़ेस का उपयोग करें, और एक एब्सtract क्लास का उपयोग निकट से संबंधित प्रकारों के बीच सामान्य कोड साझा करने के लिए किया जाता है।

संक्षेप में, एक इंटरफ़ेस यह बताता है कि एक क्लास क्या कर सकती है, जबकि एक एब्सोल्यूट इंटरफ़ेस यह बताता है कि एक क्लास क्या कर सकती है।tract क्लास यह भी परिभाषित कर सकती है कि इसे कैसे किया जाता है।

C# में मल्टीपल इंटरफेस कैसे इम्प्लीमेंट करें

क्लास इनहेरिटेंस के विपरीत, C# एक ही क्लास को एक से अधिक इंटरफेस को इम्प्लीमेंट करने की अनुमति देता है। इस प्रकार यह भाषा एक सुरक्षित मल्टीपल इनहेरिटेंस प्रदान करती है, जिसमें एक साथ कई बेस क्लास को इनहेरिट करने से उत्पन्न होने वाली अस्पष्टता नहीं होती।

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

चरण 1) दो इंटरफेस घोषित करें, जिनमें से प्रत्येक का अपना एक मेथड हो।

चरण 2) एक ऐसी क्लास बनाएं जो दोनों इंटरफेस को इम्प्लीमेंट करती हो, इंटरफेस के नामों को कॉमा से अलग करें।

चरण 3) प्रत्येक इंटरफ़ेस में घोषित प्रत्येक सदस्य के लिए एक मेथड बॉडी प्रदान करें।

नीचे दिया गया उदाहरण एक Document क्लास को दर्शाता है जो I दोनों को लागू करता है।Readable और एक IWritable इंटरफ़ेस।

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code स्पष्टीकरण: -

  1. हम दो इंटरफेस घोषित करते हैं, IReadable और IWritable। प्रत्येक इंटरफ़ेस बिना बॉडी के एक ही विधि घोषित करता है।
  2. Document क्लास कॉलन के बाद दोनों इंटरफेस को कॉमा से अलग करके सूचीबद्ध करती है, इसलिए यह दोनों शर्तों का सम्मान करने के लिए सहमत है।tracटीएस।
  3. इसके बाद क्लास रीड और राइट मेथड को परिभाषित करती है। स्किप करेंping दोनों ही तरीकों से कंपाइल-टाइम त्रुटि उत्पन्न होगी।
  4. मेन मेथड एक डॉक्यूमेंट ऑब्जेक्ट बनाता है और दोनों मेथड को कॉल करता है, जिससे यह साबित होता है कि क्लास दोनों इंटरफेस को संतुष्ट करती है।

जब प्रोग्राम चलता है, तो यह प्रिंट करता है दस्तावेज़ को पढ़ना पहली पंक्ति पर और दस्तावेज़ में लिखना दूसरी पंक्ति पर। यह पैटर्न प्रत्येक संयोजन को बनाए रखता है।tracइसका आकार छोटा और केंद्रित है, जिससे डॉक्यूमेंट क्लास का परीक्षण करना और उसका विस्तार करना आसान हो जाता है।

C# में इंटरफेस का उपयोग करने के लाभ

इंटरफ़ेस का उपयोग पेशेवर C# प्रोजेक्ट्स में व्यापक रूप से किया जाता है क्योंकि वे कोड को लचीला और रखरखाव में आसान बनाते हैं। वे आपको एक निश्चित सीमा के भीतर प्रोग्रामिंग करने की सुविधा देते हैं।tracकिसी विशिष्ट वर्ग के बजाय टी।

मुख्य लाभों में शामिल हैं:

  • ढीला युग्मन: Code यह किसी विशिष्ट क्लास पर नहीं, बल्कि इंटरफ़ेस पर निर्भर करता है, इसलिए कॉल करने वालों को बाधित किए बिना कार्यान्वयन में बदलाव किया जा सकता है।
  • बहुवंशापचय: एक क्लास कई इंटरफेस से व्यवहार इनहेरिट कर सकती है, जो कि सामान्य क्लास इनहेरिटेंस में संभव नहीं है।
  • परीक्षण योग्यता: इंटरफेस की मदद से यूनिट टेस्टिंग के दौरान वास्तविक क्लास को मॉक ऑब्जेक्ट से बदलना आसान हो जाता है।
  • डिपेंडेंसी इंजेक्शन: फ्रेमवर्क रनटाइम पर एक इंटरफेस कार्यान्वयन को इंजेक्ट करते हैं, जो SOLID सिद्धांतों के पीछे एक मूल विचार है।
  • संगति: प्रत्येक कार्यान्वयन वर्ग को सदस्यों का एक ही सेट प्रदान करने के लिए बाध्य किया जाता है, जो एपीआई को पूर्वानुमानित बनाए रखता है।

इन फायदों के कारण, इंटरफेस अधिकांश आधुनिक C# डिजाइन पैटर्न और एप्लिकेशन फ्रेमवर्क के केंद्र में स्थित हैं।

अक्सर पूछे जाने वाले प्रश्न

परंपरा के अनुसार, C# इंटरफ़ेस का नाम बड़े अक्षर I से शुरू होता है, जैसे कि IDisposable या IReadable'I' उपसर्ग तुरंत यह संकेत देता है कि यह प्रकार एक इंटरफ़ेस है न कि एक क्लास या स्ट्रक्चर।

C# 8.0 से पहले, एक इंटरफ़ेस में केवल घोषणाएँ होती थीं। C# 8.0 के बाद से, डिफ़ॉल्ट इंटरफ़ेस विधियाँ एक इंटरफ़ेस को विधि निकाय प्रदान करने की अनुमति देती हैं, इसलिए नए सदस्यों को जोड़ने पर भी पुराने कार्यान्वयन काम करते रहते हैं।

स्पष्ट कार्यान्वयन किसी सदस्य को उसके इंटरफ़ेस उपसर्ग के साथ नाम देता है, जैसे कि IReadable.पढ़ें। इसके बाद सदस्य को केवल एक इंटरफ़ेस संदर्भ के माध्यम से ही कॉल किया जा सकता है, जिससे दो इंटरफ़ेस द्वारा एक ही विधि घोषित किए जाने पर नाम के टकराव से बचा जा सकता है।

जी हाँ। एक इंटरफ़ेस एक या एक से अधिक अन्य इंटरफ़ेस को इनहेरिट कर सकता है। चाइल्ड इंटरफ़ेस को इम्प्लीमेंट करने वाली क्लास को चाइल्ड इंटरफ़ेस और सभी इनहेरिटेड पैरेंट इंटरफ़ेस के सभी मेथड को डिफाइन करना होगा।

नहीं। किसी इंटरफ़ेस को सीधे इंस्टैंशिएट नहीं किया जा सकता क्योंकि इसका कोई इम्प्लीमेंटेशन नहीं होता। आप उस क्लास का ऑब्जेक्ट बनाते हैं जो इंटरफ़ेस को इम्प्लीमेंट करती है, फिर उस ऑब्जेक्ट को इंटरफ़ेस टाइप के माध्यम से रेफरेंस करते हैं।

जी हाँ। क्लासिक इंटरफ़ेस के सदस्य स्वतः ही सार्वजनिक होते हैं, और आप उनमें एक्सेस मॉडिफ़ायर नहीं जोड़ सकते। कार्यान्वयन करने वाली क्लास को भी संबंधित सदस्यों को सार्वजनिक घोषित करना होगा।

हाँ। GitHub Copilot एक इंटरफ़ेस का ढांचा तैयार कर सकता है, उसके मेथड सिग्नेचर सुझा सकता है, और एक संक्षिप्त टिप्पणी या इंटरफ़ेस नाम से उसे लागू करने वाली क्लास उत्पन्न कर सकता है, जिससे प्रक्रिया तेज़ हो जाती है।tracटी-फर्स्ट डेवलपमेंट।

ML.NET अपनी मशीन लर्निंग पाइपलाइन को परिभाषित करने के लिए ITransformer और IDataView जैसे इंटरफेस पर निर्भर करता है। इन इंटरफेस के आधार पर कोडिंग करनाtracts आपको ट्रेनिंग कोड को दोबारा लिखे बिना मॉडल और डेटा स्रोतों को बदलने की सुविधा देता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: