C# में इनहेरिटेंस की मदद से क्लास का पदानुक्रम बनाया जा सकता है। इससे किसी डेराइव्ड क्लास (Car) को अपनी पैरेंट क्लास (Vehicle) का व्यवहार और डेटा विरासत में मिल जाता है। अगर कोई पैरेंट तय नहीं किया गया हो, तो क्लास object क्लास से इनहेरिट करती है।
पैरेंट क्लासें डेराइव्ड क्लास को तीन तरीकों से फंक्शनैलिटी दे सकती हैं:
virtual मेथड बनाना, जो साधारण मेथड जैसा ही होता है, बस उसे डेराइव्ड क्लास बदल सकती हैं।abstract मेथड बनाना। यह ऐसा मेथड होता है जिसे लागू नहीं किया गया होता, और जिसे डेराइव्ड क्लास को ज़रूर लागू करना होता है। जिस क्लास में abstract मेथड हों, उसे भी abstract घोषित करना ज़रूरी है। abstract क्लास का ऑब्जेक्ट नहीं बनाया जा सकता।protected एक्सेस मॉडिफायर की मदद से पैरेंट क्लास के मेंबर को डेराइव्ड क्लास में एक्सेस किया जा सकता है, लेकिन बाकी क्लासों से यह एक्सेस बंद रहता है।
डेराइव्ड क्लासें, पैरेंट क्लास के मेंबर को base कीवर्ड के ज़रिए एक्सेस कर सकती हैं।
// Inherits from the 'object' class
abstract class Vehicle
{
// Can be overridden
public virtual void Drive()
{
}
// Must be overridden
protected abstract int Speed();
}
class Car : Vehicle
{
public override void Drive()
{
// Override virtual method
// Call parent implementation
base.Drive();
}
protected override int Speed()
{
// Implement abstract method
}
}
डेराइव्ड क्लास का कंस्ट्रक्टर, अपने कंस्ट्रक्टर का कोड चलाने से पहले अपनी पैरेंट क्लास के कंस्ट्रक्टर को अपने आप कॉल करता है। base कीवर्ड की मदद से पैरेंट क्लास के कंस्ट्रक्टर को आर्गुमेंट भी भेजे जा सकते हैं:
abstract class Vehicle
{
protected Vehicle(int wheels)
{
Console.WriteLine("Called first");
}
}
class Car : Vehicle
{
public Car() : base(4)
{
Console.WriteLine("Called second");
}
}
जब किसी बेस क्लास से एक से ज़्यादा क्लासें बनती हैं, तो अक्सर वे दो (या उससे ज़्यादा) क्लासें बेस क्लास के मेथड के अलग-अलग रूप लागू करती हैं। यह पॉलिमॉर्फिज़्म नाम का बहुत ज़रूरी सिद्धांत है। उदाहरण के लिए, ऊपर वाले उदाहरण में थोड़ा बदलाव करके हम दिखाते हैं कि Vehicle इस्तेमाल करने वाला कोड अपना व्यवहार कैसे बदल सकता है। यह इस पर निर्भर करता है कि किस तरह के वाहन का ऑब्जेक्ट बनाया गया है।
abstract class Vehicle
{
public abstract string GetDescription();
}
class Car : Vehicle
{
public Car()
{
}
public override string GetDescription()
{
return "Runabout";
}
}
class Rig : Vehicle
{
public Rig()
{
}
public override string GetDescription()
{
return "Big Rig";
}
}
Vehicle v1 = new Car();
Vehicle v2 = new Rig();
v1.GetDescription();
// => Runabout
v2.GetDescription();
// => Big Rig
इस अभ्यास में आप "Wizard and Warriors" नाम का एक रोल-प्लेइंग गेम खेल रहे हैं, जिसमें आप विज़ार्ड या वॉरियर, इनमें से कोई भी बनकर खेल सकते हैं।
वॉरियर और विज़ार्ड के लिए अलग-अलग नियम हैं, जो तय करते हैं कि वे कितने डैमेज पॉइंट देते हैं।
वॉरियर के लिए ये नियम हैं:
विज़ार्ड के लिए ये नियम हैं:
आम तौर पर पात्र कभी असुरक्षित नहीं होते। लेकिन अगर विज़ार्ड ने स्पेल तैयार नहीं किया है, तो वे असुरक्षित होते हैं।
इस अभ्यास में वॉरियर और विज़ार्ड पात्रों से जुड़े छह टास्क हैं।
पात्र का वर्णन लौटाने के लिए Character क्लास पर ToString() मेथड को ओवरराइड कीजिए। यह वर्णन इस फ़ॉर्मैट में होना चाहिए: "Character is a <CHARACTER_TYPE>"।
var warrior = new Warrior();
warrior.ToString();
// => "Character is a Warrior"
यह सुनिश्चित कीजिए कि Character.Vulnerable() मेथड हमेशा false लौटाता है।
var warrior = new Warrior();
warrior.Vulnerable();
// => false
विज़ार्ड को पहले से स्पेल तैयार करने की सुविधा देने के लिए Wizard.PrepareSpell() मेथड लागू कीजिए।
var wizard = new Wizard();
wizard.PrepareSpell();
यह सुनिश्चित कीजिए कि अगर विज़ार्ड ने स्पेल तैयार नहीं किया है, तो Vulnerable() मेथड true लौटाता है; अगर किया है, तो false लौटाता है।
var wizard = new Wizard();
wizard.Vulnerable();
// => true
Wizard.DamagePoints() मेथड ऐसा लागू कीजिए जो दिए जाने वाले डैमेज पॉइंट लौटाए: स्पेल तैयार होने पर 12 डैमेज पॉइंट, और न होने पर 3 डैमेज पॉइंट।
var wizard = new Wizard();
var warrior = new Warrior();
wizard.PrepareSpell();
wizard.DamagePoints(warrior);
// => 12
Warrior.DamagePoints() मेथड ऐसा लागू कीजिए जो दिए जाने वाले डैमेज पॉइंट लौटाए: लक्ष्य के असुरक्षित होने पर 10 डैमेज पॉइंट, और न होने पर 6 डैमेज पॉइंट।
var warrior = new Warrior();
var wizard = new Wizard();
warrior.DamagePoints(wizard);
// => 10
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।