Difference Between Abstract Classes and Interfaces c# In Hindi
C# प्रोग्रामिंग लैंग्वेज में एब्स्ट्रैक्ट क्लास और इंटरफ़ेस दोनों क्लास फीचर्स या कांसेप्ट का यूज़ C# क्लास प्रोग्राम के लिए एक बेसिक स्ट्रक्चर और क्लास ऑब्जेक्ट प्रोटोटाइप फॉर्मेट या लेआउट डिक्लेअर या डिज़ाइन करने में किया जाता है. लेकिन यहाँ एब्स्ट्रैक्ट क्लास और इंटरफ़ेस दोनों किसी क्लास प्रोग्राम में मल्टीप्ल इंडिविजुअल टास्क एक्टिविटीज को हैंडल या मैनेज करते हैं, और मौजूदा प्रोगाम में जरूरत के अनुसार एब्स्ट्रैक्ट क्लास और इंटरफ़ेस दोनों के स्पेशल फंक्शन और फीचर्स भी आपस में यूनिक होते हैं।

So, let’s explore the key differences between abstract classes and interfaces in C# programming.
Purpose and Use of Abstract Classes and Interfaces.
Abstract Class Concept in C#.
C# प्रोग्राम में एब्स्ट्रैक्ट क्लास मेथड का यूज़ तब किया जाता है, जब C# प्रोग्रामर को डिराइव्ड या सबक्लास के लिए कुछ डिफ़ॉल्ट बिहेवियर क्रिएट या इम्प्लीमेंट करना चाहते हैं, जबकि इसमें आप डिराइव्ड सबक्लास को अप्लाई या इम्प्लीमेंट करने के लिए कुछ मेथड भी डिफाइन करना चाहते हैं।
C# प्रोग्राम में एब्स्ट्रैक्ट क्लास तब यूज़ की जाती हैं, जब किसी क्लास प्रोग्राम में कोई शेयर्ड बेस फंक्शनैलिटी डिफाइन होती है. जिसे C# यूजर को अपने मौजूदा सभी सबक्लास प्रॉपर्टीज में इनहेरिट करने की आवश्यकता होती है।
एब्स्ट्रैक्ट क्लास मेथड का यूज़ क्लास हायरार्की स्ट्रक्चर में इंडिविजुअल सेपरेटेड क्लास के अंदर प्रोग्राम सोर्स कोड को इन्हेरिट या शेयर करने में किया जा सकता है।
Interface Concept in C#.
C# प्रोग्राम में इंटरफ़ेस मेथड का यूज़, किसी यूजर डिफाइन क्लास प्रॉपर्टी और उसके इवेंट के ऑब्जेक्ट लेआउट या स्ट्रक्चर को क्लास में डिक्लेअर या डिफाइन करने में किया जाता है. जिसे C# यूजर को किसी क्लास को कोई इम्प्लीमेंटेशन प्रोवाइड किए बिना इम्प्लीमेंट करना होता है।
C# क्लास में इंटरफ़ेस मेथड का बेस्ट यूज़ केस तब होता है, जब C# यूजर किसी क्लास प्रोग्राम में यह इंडीकेट करना चाहते हैं कि मौजूदा प्रोग्राम में क्लास को क्या करना चाहिए उसके (बिहेवियर) को बिना यह इंडीकेट किये कि क्लास को यह कैसे डील करना चाहिए।
ये किसी क्लास के बिहेवियर के एक मल्टीपल इनहेरिटेंस कांसेप्ट का एक फॉर्मेट अल्लॉव करते हैं. क्योंकि इसमें यूजर डिफाइन एक क्लास प्रोग्राम में क्लास एक समय में मल्टीप्ल इंडिविजुअल क्लास इंटरफ़ेस को इम्प्लीमेंट कर सकती है।
Inheritance Concept in C#.
Abstract Class Method Concept.
एक यूजर डिफाइन पैरेंट या बेस क्लास सिर्फ़ एक एब्स्ट्रैक्ट क्लास से इनहेरिट हो सकती है। यह C# क्लास प्रोग्राम के लिए किसी प्रकार के मल्टीपल इनहेरिटेंस कांसेप्ट को सपोर्ट नहीं करता है।
जरूरत पड़ने पर एब्स्ट्रैक्ट क्लास में एब्स्ट्रैक्ट (अनइम्प्लीमेंटेड) और कंक्रीट (इम्प्लीमेंटेड) दोनों तरह के क्लास मेथड डिफाइन या डिक्लेअर किए जा सकते हैं।
बेस क्लास में डिफाइन एब्स्ट्रैक्ट क्लास फील्ड, मेंबर, कंस्ट्रक्टर और अन्य क्लास एलिमेंट मेंबर भी डिक्लेअर कर सकते हैं. जिन्हें डिराइव्ड या सबक्लास से इनहेरिट किया जा सकता है।
Interface Class Method Concept.
एक यूजर डिफाइन क्लास या स्ट्रक्चर कई क्लास इंटरफेस को इम्प्लीमेंट या अप्लाई कर सकता है, जिससे मौजूदा क्लास बिहेवियर का मल्टीपल इनहेरिटेंस डिफाइन हो सकता है।
किसी क्लास इंटरफेस में मेथड के लिए इम्प्लीमेंटेशन नहीं हो सकता है, सिर्फ (C# 8.0 वर्जन से शुरू होने वाले डिफ़ॉल्ट क्लास मेथड को छोड़कर), इसमें सिर्फ़ मल्टीप्ल इंटरफ़ेस मेथड सिग्नेचर डिफाइन हो सकते हैं।
इंटरफेस क्लास में फील्ड या कंस्ट्रक्टर को डिफाइन या डिक्लेअर नहीं कर सकते है. सिर्फ़ किसी क्लास मेथड सिग्नेचर, प्रॉपर्टी, इवेंट या इंडेक्सर के रूप में हो सकते हैं।
Method Implementation in C#.
Abstract Method Concept.
C# प्रोग्राम में एब्स्ट्रैक्ट मेथड (बिना किसी बॉडी के) और कंक्रीट मेथड (बॉडी के साथ में) दोनों तरह से डिफाइन हो सकते हैं।
किसी क्लास में यूजर डिफाइन एब्स्ट्रैक्ट क्लास मेथड को नॉन-एब्स्ट्रैक्ट डिराइव्ड या सबक्लास में इम्प्लीमेंट किया जा सकता है, लेकिन क्लास में कंक्रीट मेथड वैसे ही इनहेरिट किए जा सकते हैं।
Interface Method Concept.
C# प्रोग्राम में मेथड इम्प्लीमेंटेशन डिफाइन नहीं हो सकते है, सिर्फ (C# 8.0 वर्जन और उसके बाद के वर्जन को छोड़कर, जिसमे डिफ़ॉल्ट इंटरफेस मेथड इंट्रोड्यूस या डिक्लेअर किए गए थे)।
क्लास में डिफाइन इंटरफ़ेस में सभी मेथड इम्प्लिसिटली एब्स्ट्रैक्ट नेचर के होते हैं, (उनकी कोई बॉडी डिफाइन नहीं होती), और उन्हें मौजूदा क्लास में इंटरफ़ेस को इम्प्लीमेंट करने वाले किसी भी क्लास या स्ट्रक्चर द्वारा इम्प्लीमेंट किया जाना चाहिए।
Members (fields, properties, etc.) in C#.
Abstract Classes Method Concept.
इसमें कस्टम यूजर डिफाइन क्लास में फ़ील्ड्स, प्रॉपर्टीज़, मेथड्स, कंस्ट्रक्टर्स और डिस्ट्रक्टर्स भी डिक्लेअर हो सकते हैं।
इन्हे क्लास मेंबर्स के लिए एक्सेस मॉडिफ़ायर के रूप में डिफाइन या डिक्लेअर कर सकते हैं. जैसे पब्लिक, प्रोटेक्टेड, प्राइवेट, आदि क्लास डाटा टाइप मेथड एक्सेस मॉडिफ़ायर है।
यूजर डिफाइन एब्स्ट्रैक्ट क्लासेस में स्टैटिक मेंबर्स डिफाइन हो सकते हैं. जिन्हें मौजूदा क्लास के सभी इंस्टेंस के साथ शेयर किया जा सकता है।
Class Interface Concept.
क्लास इंटरफ़ेस में क्लास फ़ील्ड्स या कंस्ट्रक्टर्स डिफाइन नहीं हो सकते है।
क्लास इंटरफ़ेस प्रोग्राम में सिर्फ़ मेथड सिग्नेचर्स, प्रॉपर्टीज़, इवेंट्स और इंडेक्सर्स को डिफाइन करें।
क्लास में डिफाइन इंटरफ़ेस में सभी क्लास मेंबर्स इम्प्लिसिटली पब्लिक नेचर में डिफाइन होते हैं, और इनमें क्लास के लिए एक्सेस मॉडिफ़ायर जैसे, प्राइवेट, प्रोटेक्टेड क्रिएट नहीं हो सकते है।
Access Modifiers in C#.
Abstract Classes Method Concept.
एब्स्ट्रैक्ट क्लास मेथड्स, फ़ील्ड्स और प्रॉपर्टीज़ के लिए एक्सेस मॉडिफ़ायर डिफाइन हो सकते हैं. जैसे पब्लिक, प्रोटेक्टेड और प्राइवेट, आदि है।
एब्स्ट्रैक्ट क्लास आपको मोजूदा क्लास मेंबर्स की विज़िबिलिटी पर डिटेल कंट्रोल प्रोवाइड करता है।
Interface Method Concept.
इंटरफ़ेस में सभी क्लास मेंबर्स इम्प्लिसिटली पब्लिक नेचर में डिफाइन होते हैं। C# किसी यूजर डिफाइन इंटरफ़ेस के मेंबर्स के लिए प्राइवेट या प्रोटेक्टेड जैसा क्लास एक्सेस मॉडिफायर नहीं बता सकते है।
Instantiation Concept in C#.
Abstract Class Method Concept.
इन्हे किसी क्लास में डायरेक्ट इंस्टैंशिएट नहीं किया जा सकता है। यहाँ आप एब्स्ट्रैक्ट क्लास का ऑब्जेक्ट क्रिएट नहीं कर सकते है।
किसी क्लास प्रोग्राम में एब्स्ट्रैक्ट क्लास को इनहेरिट किया जाना चाहिए, और डिराइव्ड या सबक्लास को इंस्टैंशिएट करने के लिए उनके एब्स्ट्रैक्ट क्लास मेथड को डिराइव्ड क्लास द्वारा इम्प्लीमेंट किया जाना चाहिए।
Interface Concept in C#.
किसी C# क्लास प्रोग्राम में डायरेक्ट इसे इंस्टैंशिएट नहीं किया जा सकता है। आप इंटरफ़ेस का ऑब्जेक्ट क्रिएट नहीं कर सकते है।
किसी इंटरफ़ेस को यूज़ करने से पहले उसे किसी क्लास या स्ट्रक्चर द्वारा इम्प्लीमेंट किया जाना चाहिए।
Default Behavior and Flexibility in C#.
Abstract Class Method Concept.
डिफ़ॉल्ट क्लास बिहैवियर और फ्लेक्सिबिलिटी में एब्स्ट्रैक्ट क्लास डिराइव्ड क्लास के लिए एक कॉमन बेस प्रोवाइड करती हैं. जिसमें कुछ यूजर डिफाइन क्लास मेथड के लिए डिफ़ॉल्ट बिहेवियर प्रोवाइड करने की पॉसिबिलिटी इन्क्लुड है।
यूजर डिफाइन एब्स्ट्रैक्ट क्लास अधिक आसान और फ्लेक्सिबल हो सकती हैं, यदि इसमें कोई शेयर्ड लॉजिक या डिफाइन हो, जिसे सभी डिराइव्ड सबक्लास द्वारा अगेन यूज़ किया जाना चाहिए।
Interface Method Concept.
यूजर डिफाइन क्लास इंटरफ़ेस जो आप किसी प्रोग्राम में अप्लाई करते हैं, और वे स्ट्रिक्ट डिफाइन हो सकते हैं, क्योंकि ये सिर्फ़ एक क्लास मेथड सिग्नेचर को डिफाइन करते हैं।
ये किसी प्रोग्राम में तब यूज़ होते हैं, जब C# यूजर को किसी स्पेशल क्लास ऑब्जेक्ट लेआउट (जैसे “ICourse” के लिए Select() क्लास मेथड की आवश्यकता होती है) को अप्लाई करने की ज़रूरत होती है. यहाँ यह इंडीकेट किये यह बताए कि उस क्लास बिहेवियर को कैसे अप्लाई किया जाना चाहिए।
Multiple inheritance in C#.
Abstract Classes Method Concept.
C# प्रोग्राम क्लासेस के लिए सिंगल इनहेरिटेंस को फुल सपोर्ट करता है। एक यूजर डिफाइन क्लास सिर्फ़ एक एब्स्ट्रैक्ट क्लास से इनहेरिट हो सकती है।
Interface Method Concept.
C# प्रोग्राम में मल्टीपल इंटरफ़ेस इनहेरिटेंस फीचर्स को सपोर्ट करता है। एक यूजर डिफाइन क्लास या स्ट्रक्चर एक समय में कई इंटरफ़ेस को इम्प्लीमेंट कर सकता है. जिससे एक डिक्लेअर क्लास में इंटरफ़ेस बिहेवियर के कई सेट डिफाइन हो सकते हैं।
When to Use Abstract Classes and Interfaces
When to Use Use abstract classes in C#.
जब C# यूजर को डिराइव्ड या सबक्लासेस में कॉमन बेस क्लास शेयर्ड फंक्शनैलिटी और इम्प्लीमेंटेशन प्रोवाइड की ज़रूरत हो।
जब C# यूजर को क्लास फ़ील्ड्स, कंस्ट्रक्टर्स, या स्टैटिक मेंबर्स को यूज़ करने की ज़रूरत हो।
जब यूजर डिफाइन बेस क्लास कुछ डिफ़ॉल्ट इम्प्लीमेंटेशन प्रोवाइड करता है, और C# यूजर यह मैनेज करना चाहते हैं कि डिराइव्ड सबक्लासेस के पास क्रिएट करने के लिए एक कॉमन बेस हो।
When to Use Interfaces in C#.
जब C# यूजर को एक क्लास ऑब्जेक्ट प्रोटोटाइप डिफाइन और डिक्लेअर करने की आवश्यकता हो जिसको किसी क्लासेस को फॉलो करना होगा। लेकिन उस क्लास में यह इंडीकेट किए बिना कि इसका इम्प्लीमेंटेशन कैसे प्रोवाइड किया जाना चाहिए।
जब C# यूजर को किसी क्लास में मल्टीपल इनहेरिटेंस डिफाइन या डिक्लेअर करने की ज़रूरत हो (जिसमे एक क्लास कई क्लास इंटरफ़ेस को इम्प्लीमेंट कर सकती है)।
जब C# यूजर को ऐसा क्लास बिहेवियर स्पेसिफाई या डिक्लेअर करने की ज़रूरत हो. जिसमे किसी क्लास हायरार्की को अवॉयड किए बिना कोई भी क्लास आप इम्प्लीमेंट कर सकते है।
Comparison of abstract class and interface examples.
Abstract class example in C#.
using System;
public abstract class Course
{
public string Course_Name { get; set; }
public void Select()
{
Console.WriteLine(“Select your desired course.”);
}
// here we define a Abstract method to be implemented by derived subclasses
public abstract void Selection();
}
public class Java : Course
{
public override void Selection()
{
Console.WriteLine(“Java language selected”);
}
}
public class Program
{
static void Main()
{
Course java = new Java();
java.Select(); // Result is – Select your desired course
java.Selection(); // Result is – Java language selected
}
}
Interface example in C#.
using System;
public interface ICourse
{
void Select();
void Selection();
}
public class Java : ICourse
{
public void Select()
{
Console.WriteLine(“Java language selected”);
}
public void Selection()
{
Console.WriteLine(“Select your desired course.”);
}
}
public class Program
{
static void Main()
{
ICourse java = new Java();
java.Selection(); // Output: Select your desired course.
java.Select(); // Output: Java language selected
}
}
Main Differences Between Abstract Classes and Interfaces In c#.
| Each Feature | Abstract Class method | Interface method |
| Inheritance support | It supports only Single class inheritance (only one abstract class) in base class. | It supports Multiple class base to derived inheritance (can implement many) time |
| Method Implementation | It Can have both abstract and concrete class methods implementation when we need. | It allows Only abstract class methods (until C# 8.0) version |
| Class Fields | Yes, it Can have class fields when need | Thy Cannot have Claas fields |
| Constructors’ creation | Yes, they Can have or create support class constructors | They Cannot have any class constructors |
| Access Modifiers type | They Can use multiple class access modifiers (public, private, etc.) data type | In this All members are implicitly public defined |
| Default Behavior in class | Yes, they Can provide you default class method implementation support | They Cannot provide you default behaviour implementation (except in C# 8.0 with default version methods) |
| Static Members use case | Yes, they Can have static class members | They Cannot have static class members |
| Each Member Types | Yes, they Can have class fields, methods, properties, events, constructors etc. | They Can only have class methods, properties, events etc. |
| Multiple Inheritance support | no, they have No (only one base class) inheritance support. | Yes, they (can implement many class interfaces) according to need |
| Instantiation availability | They Cannot be instantiated directly support | Even thy are Cannot be instantiated directly in interface |
Abstract Classes and Interfaces Detail Summary.
C# प्रोग्राम में एब्स्ट्रैक्ट क्लासेस से रिलेटेड क्लासेस के बीच इम्प्लीमेंटेशन शेयर करने और डिफ़ॉल्ट क्लास बिहेवियर प्रोवाइड करने के लिए यह एक यूज़फुल फीचर हैं. जबकि क्लास में डिफाइन इंटरफ़ेस उन क्लास ऑब्जेक्ट या प्रोटोटाइप को डिफाइन करने के लिए सबसे बेस्ट कांसेप्ट हैं. जिन्हें क्लास प्रोग्राम में इंडिविजुअल सेपेटेड क्लासेस अपनी क्लास हायरार्की को अवॉयड किए बिना इम्प्लीमेंट या अप्लाई कर सकती हैं।
जब C# यूजर को क्लास में शेयर्ड फंक्शनैलिटी की आवश्यकता हो या जब C# यूजर को क्लास फ़ील्ड्स डिफाइन करने या डिफ़ॉल्ट मेथड इम्प्लीमेंटेशन प्रोवाइड करने की ज़रूरत हो, तो आप एब्स्ट्रैक्ट क्लासेस का यूज़ करें। C# प्रोग्राम में इंटरफ़ेस का यूज़ तब करें, जब C# यूजर को ऐसा क्लास बिहेवियर डिफाइन करने की ज़रूरत हो. जिसे एक समय में मल्टीप्ल इंडिविजुअल सेपेरेटेड क्लासेस द्वारा शेयर किया जा सके या यदि C# यूजर को बिहेवियर की मल्टीपल इनहेरिटेंस करने की ज़रूरत हो।
