एकल इनहेरिटेंस (Single Inheritance) में एक डेराइव्ड क्लास केवल एक बेस क्लास से इनहेरिट करती है। यह इनहेरिटेंस का सबसे सरल रूप है।
उदाहरण
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyApplication {
class Demo {
static void Main(string[] args) {
// Father क्लास
Father f = new Father();
f.Display();
// Son क्लास
Son s = new Son();
s.Display(); // Father से इनहेरिटेड
s.DisplayOne(); // Son का अपना मेथड
Console.ReadKey();
}
}
class Father {
public void Display() {
Console.WriteLine("Display");
}
}
class Son : Father {
public void DisplayOne() {
Console.WriteLine("DisplayOne");
}
}
}
आउटपुट
Display Display DisplayOne
आरेख
Father (बेस क्लास)
│
│ इनहेरिट करता है
▼
Son (डेराइव्ड क्लास)
पहुंच संशोधक और इनहेरिटेंस
| मोडिफायर | डेराइव्ड क्लास में पहुंच |
|---|---|
public |
हां |
protected |
हां (केवल डेराइव्ड क्लास में) |
internal |
हां (समान असेंबली में) |
protected internal |
हां (डेराइव्ड या समान असेंबली) |
private |
नहीं (लेकिन ऑब्जेक्ट में मौजूद होता है) |
private protected |
हां (डेराइव्ड और समान असेंबली) |
कंस्ट्रक्टर इनहेरिटेंस
कंस्ट्रक्टर्स इनहेरिट नहीं होते, लेकिन डेराइव्ड क्लास को बेस कंस्ट्रक्टर कॉल करना चाहिए:
class Father {
public Father(string name) {
Name = name;
}
public string Name { get; }
}
class Son : Father {
public Son(string name, int age) : base(name) { // बेस कंस्ट्रक्टर कॉल
Age = age;
}
public int Age { get; }
}
मेथड हाइडिंग vs ओवरराइडिंग
class Father {
public void Display() { Console.WriteLine("Father"); }
}
class Son : Father {
// हाइडिंग (नया मेथड) - डिफॉल्ट व्यवहार
public new void Display() { Console.WriteLine("Son"); }
// ओवरराइडिंग (पॉलीमॉर्फिज्म) - virtual/override आवश्यक
public override void Display() { Console.WriteLine("Son (override)"); }
}
मुख्य बिंदु
- C# केवल एकल क्लास इनहेरिटेंस का समर्थन करता है (एक बेस क्लास)।
- एकाधिक "इनहेरिटेंस" के लिए इंटरफेसेस उपयोग करें।
- डेराइव्ड क्लास बेस क्लास के सभी non-private मेंबर्स एक्सेस कर सकती है।
isऔरasऑपरेटर्स टाइप जांच के लिए:son is Father→ true।