C# में एक एब्स्ट्रैक्ट क्लास में एब्स्ट्रैक्ट और नॉन-एब्स्ट्रैक्ट दोनों मेथड्स शामिल होते हैं। एक क्लास को एब्स्ट्रैक्ट घोषित किया जाता है ताकि वह एब्स्ट्रैक्ट क्लास बन सके। आप एब्स्ट्रैक्ट क्लास को इंस्टेंटिएट नहीं कर सकते।
आइए एक उदाहरण देखें, जहाँ हमारे पास एक एब्स्ट्रैक्ट क्लास Vehicle और एब्स्ट्रैक्ट मेथड display() है:
public abstract class Vehicle
{
public abstract void Display();
}
एब्स्ट्रैक्ट क्लास की डेराइव्ड क्लासेस हैं: Bus, Car, और Motorcycle। Bus डेराइव्ड क्लास का कार्यान्वयन निम्नलिखित है:
public class Bus : Vehicle
{
public override void Display()
{
Console.WriteLine("Bus");
}
}
पूर्ण उदाहरण
आइए C# में एब्स्ट्रैक्ट क्लासेस का पूरा उदाहरण देखें:
using System;
public abstract class Vehicle
{
public abstract void Display();
}
public class Bus : Vehicle
{
public override void Display()
{
Console.WriteLine("Bus");
}
}
public class Car : Vehicle
{
public override void Display()
{
Console.WriteLine("Car");
}
}
public class Motorcycle : Vehicle
{
public override void Display()
{
Console.WriteLine("Motorcycle");
}
}
public class MyClass
{
public static void Main()
{
Vehicle v;
v = new Bus();
v.Display();
v = new Car();
v.Display();
v = new Motorcycle();
v.Display();
}
}
आउटपुट
Bus Car Motorcycle
एब्स्ट्रैक्ट क्लास बनाम इंटरफेस
| विशेषता | एब्स्ट्रैक्ट क्लास | इंटरफेस |
|---|---|---|
| मल्टीपल इम्प्लीमेंटेशन | नहीं (सिंगल इनहेरिटेंस) | हाँ |
| कंस्ट्रक्टर | हाँ | नहीं |
| फील्ड्स/प्रॉपर्टीज | हाँ (इंस्टेंस/स्टेटिक) | केवल प्रॉपर्टीज (C# 8.0+) |
| एक्सेस मोडिफायर्स | सभी अनुमत | सभी पब्लिक (डिफ़ॉल्ट) |
| डिफ़ॉल्ट कार्यान्वयन | हाँ | C# 8.0+ में डिफ़ॉल्ट मेथड्स |
कब उपयोग करें
- एब्स्ट्रैक्ट क्लास: जब बेस क्लास में साझा स्टेट/व्यवहार हो, "is-a" रिलेशनशिप हो
- इंटरफेस: जब कॉन्ट्रैक्ट परिभाषित करना हो, मल्टीपल इम्प्लीमेंटेशन की आवश्यकता हो