Introduction
ูู ุงูู
ูุงู ุฏูุ ููุชููู
ุนู ุงูู Inheritance (ุงููุฑุงุซุฉ) ูู ุงูุจุฑู
ุฌุฉ ุงูุดูุฆูุฉ (Object-Oriented Programming) ุจุงุณุชุฎุฏุงู
ูุบุฉ C# ู
ุน ุฃู
ุซูุฉ. ุงูู Inheritance ูู ูุงุญุฏ ู
ู ู
ุจุงุฏุฆ ุงูู OOP. ูุง ุฑูุช ุชูุฑุง ู
ูุงููุง ุนู ุงูู Class ูุงูู Object ูู C# ูุจู ู
ุง ุชูู
ู ููุง. ุฎูููุง ูููู
ุฅูู ูู ุงูู Inheritance.
What is Inheritance in C#?
ุงูู Inheritance ูู C# ูู ุขููุฉ ูุงุณุชุฎุฏุงู
ุงูู members ุงููู ู
ุชุนุฑูุฉ ูู class ู
ุนูู ู
ู ุฎูุงู class ุชุงูู. ุฅุญูุง ุนุงุฑููู ุฅู ุงูู class ูู ู
ุฌู
ูุนุฉ ู
ู ุงูู members. ุงูู members ุงููู ู
ุชุนุฑูุฉ ูู class ู
ุนูู ู
ู
ูู class ุชุงูู ูุณุชุฎุฏู
ูุง ุนู ุทุฑูู ุฅูุดุงุก ุนูุงูุฉ parent/child (ุฃุจ/ุงุจู) ุจูู ุงูู classes ุฏู.
ุนู ูู ูุงุ ูููุง ุนุงุฑููู ุฅู ูู ู ู ุชููุงุช ุฃูููุง ุจุชุจูู ุจุชุงุนุชูุง. ุงูุฃุจูุงุก ุจูุงุฎุฏูุง ุญููู ุนูู ู ู ุชููุงุช ุงูุฃุจ. ูููุ ูุฅู ุฏู ุงููุงููู. ุญุณุจ ุงููุงูููุ ูู ู ู ุชููุงุช ุงูุฃูู ุจุชุฑูุญ ูุฃููุงุฏูู .
ููุณ ุงูู
ุจุฏุฃ ุฏู ุจุงูุธุจุท ุจูุชุทุจู ูู ุงูู Inheritance. ุงูุชุฑุถ ุฅู ุนูุฏู class ุงุณู
ู A ููู ู
ุฌู
ูุนุฉ membersุ ูุฃูุง ุนุงูุฒ ููุณ ุงูู members ุฏู ูู class ุชุงูู ุงุณู
ู B. ุทุฑููุฉ ู
ู ุงูุทุฑู ูู ุฅูู ุฃุนู
ู copy ูpaste ูููุณ ุงูููุฏ ู
ู class A ูู class B.
ููู ูู ุนู
ููุง copy ูpaste ููููุฏุ ูุฏู ุจูุชุณู
ู ุฅุนุงุฏุฉ ูุชุงุจุฉ ุงูููุฏ (rewriting the code). ุฅุนุงุฏุฉ ูุชุงุจุฉ ุงูููุฏ ุจุชุฃุซุฑ ุนูู ุญุฌู
ุงูุชุทุจูู. ูู ุญุฌู
ุงูุชุทุจูู ุฒุงุฏุ ูู ุงูููุงูุฉ ุฏู ููุฃุซุฑ ุนูู ุฃุฏุงุก (performance) ุงูุชุทุจูู.
ุนุดุงู ูุชุบูุจ ุนูู ุนู
ููุฉ ุฅุนุงุฏุฉ ุงููุชุงุจุฉ ุฏู ููุนู
ู ุฅุนุงุฏุฉ ุงุณุชุฎุฏุงู
ููููุฏ (reuse the code)ุ ุฃูุถู ุฎูุงุฑ ู
ุชุงุญ ูููุง ูู ุงูู Inheritance ูู C#. ุจุจุณุงุทุฉุ ุงููู ู
ุญุชุงุฌูู ูุนู
ูู ูู ุฅููุง ููุดุฆ ุนูุงูุฉ ุจูู ุงูุงุชููู classes. ุนูุงูุฉ ุฅููุ ุนูุงูุฉ Parent/Child. ุจู
ุฌุฑุฏ ู
ุง ุจุชูุดุฆ ุงูุนูุงูุฉ ุฏูุ ูู ุงูู members ุจุชูุน ุงูู parent class (A) ู
ู
ูู ุงุณุชุฎุฏุงู
ูู
ุฌูู ุงูู child class (B).
ุงูู Inheritance ูู C# ูู ุขููุฉ ูุงุณุชุฎุฏุงู
ุงูู members ุจุชูุน class ูู class ุชุงูู ุนู ุทุฑูู ุฅูุดุงุก ุนูุงูุฉ parent/child ุจูู ุงูู classesุ ูุฏู ุจูููุฑ ุฅุนุงุฏุฉ ุงูุงุณุชุฎุฏุงู
(re-usability).
How to Implement Inheritance in C#?
ุนุดุงู ูุทุจู ุงูู Inheritance ูู C#ุ ู
ุญุชุงุฌูู ููุดุฆ ุนูุงูุฉ Parent/Child ุจูู ุงูู classes. ุฎูููุง ูููู
ุฅุฒุงู ูุนู
ู ุฏู. ุงูุชุฑุถ ุฅู ุนูุฏูุง class ุงุณู
ู A ููู ู
ุฌู
ูุนุฉ membersุ ูุนูุฏูุง class ุชุงูู B ูุนุงูุฒููู ููุฑุซ ู
ู class A. ุงูููุฏ ุงูุชุงูู ุจููุถุญ ุฅุฒุงู ููุดุฆ ุนูุงูุฉ Parent-Child ุจูู Class A ู Class B.
class B : A
{
// B is the child class, A is the parent class
}ุฏู ูู ุงูุนู
ููุฉ ุงูุฃุณุงุณูุฉ ูุฅูุดุงุก ุนูุงูุฉ Parent/Child ูู C#. ุฏูููุชูุ ุฎูููุง ูุดูู ุงูู syntax ุงูุฃุณุงุณู ูุฅูุดุงุก ุงูุนูุงูุฉ ุฏู:
[<modifiers>] class <child class> : <parent class>
ููุงุ ู
ุตุทูุญุงุช Parent Class ู Child Class ู
ู
ูู ุชุชุณู
ู ุจุฑุถู Base Class (Superclass) ู Derived Class (Subclass). ููู ู
ุซุงููุง:
- A โ
Parent/Base/Superclass(ูููู ุจููุณ ุงูู ุนูู). - B โ
Child/Derived/Subclass(ูููู ุจููุณ ุงูู ุนูู).
ู
ูุงุญุธุฉ: ูู ุงูู Inheritanceุ ุงูู Child class ููุฏุฑ ูุณุชุฎุฏู
ุงูู members ุจุชูุน ุงูู Parent class ุจุชุงุนู ูุฃูู ูู ู
ุงูู ุงูู members ุฏู (ู
ุงุนุฏุง ุงูู private members ุจุชูุน ุงูู parent).
Why Child Cannot Consume Private Members of Parent?
ุนู ูู ูุงุ ุงูุฃุจูุงุก ูููู ุญููู ูู ู ู ุชููุงุช ุฃูููู . ุฃูุง ูุงุจูุ ุจูุฑุฉ ู ู ูู ุฃุณุชูู ุดุบู ุฃุจููุง. ู ู ูู ุฃุณุชูู ู ู ุชููุงุช ุฃุจููุง (ุนุฑุจูุฉุ ู ุจุงููุ ูููุณุ ุฃู ุญุงุฌุฉ). ููู ู ูุฏุฑุด ุฃุณุชูู ูุธููุฉ ุฃุจููุง.
ุงูุณุจุจ ูู ุฅู ุงููุธููุฉ ุงููู ุฃุจููุง ุจูุนู
ููุง ู
ู
ูู ุชููู ู
ุจููุฉ ุนูู ู
ุคููุงุชู ูุฎุจุฑุงุชู. ูุจูุฑุฉ ุฃูุง ู
ูุฏุฑุด ุฃุณุชูู
ูุธููุชู ุฏู ุชุญุฏูุฏูุง. ูุงููุธููุฉ ุฏู ุญุงุฌุฉ private ุชู
ุงู
ูุง ูุฃุจููุง. ูุฏู ู
ุด ุจุชุชูุฑุซ ููุง. ููู ุจุงูู ูู ุญุงุฌุฉุ ุงูุจูุฒูุณุ ุงููููุณุ ุงูู
ู
ุชููุงุชุ ูู ุฏู ูุงุฎุฏู.
ููุณ ุงูู
ุจุฏุฃ ุจูุชุทุจู ุนูู ุงูู Inheritance. ุงูู child class ุจูุณุชุฎุฏู
ูู ุงูู members ุจุชูุน ุงูู Parent class ู
ุงุนุฏุง ุงูู private members.
Example to Understand Inheritance in C#
ุฎูููุง ูุดูู ู
ุซุงู ุจุณูุท ุนุดุงู ูููู
ุงูู Inheritance ูู C#. ููุนู
ู class ููู ุงุชููู methods ุฒู ู
ุง ู
ูุถุญ ุชุญุช:
class A
{
public void Method1()
{
Console.WriteLine("Method 1");
}
public void Method2()
{
Console.WriteLine("Method 2");
}
}ููุงุ ุนู
ููุง class A ููู ุงุชููู public methods: Method1 ู Method2. ุฏูููุชูุ ุฃูุง ุนุงูุฒ ููุณ ุงูุงุชููู methods ุฏูู ูู class ุชุงููุ ููููู class B. ุทุฑููุฉ ู
ู ุงูุทุฑู ูู ุฅูู ุฃุนู
ู copy ููุงุชููู methods ุงููู ููู ูุฃุนู
ููู
paste ูู class B ูุงูุชุงูู:
class B
{
public void Method1()
{
Console.WriteLine("Method 1");
}
public void Method2()
{
Console.WriteLine("Method 2");
}
}ูู ุนู
ููุง ูุฏูุ ูุฏู ู
ุด ุฅุนุงุฏุฉ ุงุณุชุฎุฏุงู
ููููุฏ (code re-usability). ุฏู ุฅุนุงุฏุฉ ูุชุงุจุฉ ููููุฏ (code rewriting) ูุฏู ุจูุฃุซุฑ ุนูู ุญุฌู
ุงูุชุทุจูู. ุนุดุงู ูุฏูุ ู
ู ุบูุฑ ุฅุนุงุฏุฉ ูุชุงุจุฉุ ุงููู ู
ุญุชุงุฌูู ูุนู
ูู ูู inheritance ูุงูุชุงูู. ููุงุ class B ุจููุฑุซ ู
ู class Aุ ูุจุงูุชุงูู ุฌูู ุงูู Main methodุ ุจูุนู
ู instance ู
ู class B ูุจูุณุชุฏุนู ุงูู methods ุงููู ู
ุชุนุฑูุฉ ูู Class A.
class B : A
{
static void Main()
{
B obj = new B();
obj.Method1();
obj.Method2();
}
}ุจู
ุฌุฑุฏ ู
ุง ุจุชุนู
ู Inheritanceุ class B ููุฏุฑ ูุงุฎุฏ ุงูุงุชููู members ุงููู ู
ุชุนุฑููู ูู class A. ูููุ ูุฅู ูู ุฎุตุงุฆุต ุงูุฃุจ ุจุชูุชู
ู ููุฃุจูุงุก. ููุงุ class A ูู ุงูู Parent/Super/Base classุ ูClass B ูู ุงูู Child/Sub/Derived class.
ูู
ุง ุจููุชุจ obj.ุ ูุชูุงุญุธ ุฅู ุงูู IntelliSense ุจูุธูุฑ ุงูุงุชููู Methodsุ ุงููู ูู
ุง Method1 ู Method2. ุฏู ู
ุนูุงู ุฅู ุงูู child class ููุฏุฑ ูุณุชุฎุฏู
ุงูู members ุจุชูุน ุงูู parent class ูุฃูู ูู ุงูู
ุงูู. ูู ุจุตูุช ุนูู ูุตู ุฃู ู
ู Method1 ุฃู Method2ุ ูุชูุงููู ุจูุธูุฑ void A.Method1() ู void A.Method2(). ุฏู ู
ุนูุงู ุฅู Method1 ุฃู Method2 ุจููุชู
ูุง ูู class A ุจุณ. ููู class B ููุฏุฑ ูุณุชุฎุฏู
ูู
ูุฃูู ุงูู
ุงูู.
ู
ุซุงู: ุฃูุง ุฃูุฏุฑ ุฃุณูู ุนุฑุจูุฉ ุฃุจููุง ูุฃูู ุฃูุง ู
ุงูููุงุ ููู ูุณู ุงุณู
ุงูุชุณุฌูู ุจุงุณู
ุฃุจููุง. ุจููุณ ุงูุทุฑููุฉุ class B ููุฏุฑ ููุงุฏู ุงูู methods ูุฃููุง ุจุชุงุนุชูุ ููู ุฏุงุฎูููุงุ ุงูู methods ุฏู ุจุชูุชู
ู ูู Class A.
ุงูููุฏ ุงููุงู ู ููู ุซุงู:
using System;
namespace InheritanceDemo
{
class A
{
public void Method1()
{
Console.WriteLine("Method 1");
}
public void Method2()
{
Console.WriteLine("Method 2");
}
}
class B : A
{
static void Main()
{
B obj = new B();
obj.Method1();
obj.Method2();
Console.ReadKey();
}
}
}Output:
Method 1
Method 2
ุฏูููุชูุ ุฎูููุง ูุถูู method ุฌุฏูุฏุ ููููู Method3 ูู Class B. ุฌูู ุงูู Main methodุ ูู ุดูุช ูุตู ุงูู methodุ ูุชูุงููู ุจูุธูุฑ ุฅู ุงูู method ุฏู ุจููุชู
ู ูู class B.
using System;
namespace InheritanceDemo
{
class A
{
public void Method1()
{
Console.WriteLine("Method 1");
}
public void Method2()
{
Console.WriteLine("Method 2");
}
}
class B : A
{
public void Method3()
{
Console.WriteLine("Method 3");
}
static void Main()
{
B obj = new B();
obj.Method1();
obj.Method2();
obj.Method3();
Console.ReadKey();
}
}
}Output:
Method 1
Method 2
Method 3
How many methods are there in class B?
ู
ู
ูู ุชุณุฃู ููุณู: ูุงู
method ู
ูุฌูุฏ ูู class Bุ ุงูุฅุฌุงุจุฉ ูู 3.
ุฒู ู
ุง ูู ุงูู
ู
ุชููุงุช ุงููู ุฃุจููุง ุฃุฏุงูุงููุ ุฒุงุฆุฏ ูู ุงูู
ู
ุชููุงุช ุงููู ุฃูุง ุจูุณุจูุงุ ุจุชุจูู ุจุชุงุนุชู ุฃูุง. ุจููุณ ุงูุทุฑููุฉุ ุนุฏุฏ ุงูู methods ูู class B ูู 3: ุงุชููู methods ู
ูุฑูุซูู ู
ู ุงูู parent class A ุฒุงุฆุฏ ูุงุญุฏ method ุฅุญูุง ุนุฑููุงู ูู class B. ูุฅุญูุง ููุฏุฑ ูููู ุฅู Class A ููู 2 methodsุ ูClass B ููู 3 methods.
ุฏู ูู ุงูุนู
ููุฉ ุงูุจุณูุทุฉ ููู Inheritance ูู C#. ุจุจุณุงุทุฉ ุจุชุญุท ููุทุชูู ููู ุจุนุถ (:) ุจูู ุงูู Parent ูุงูู Child class. ููู ูู
ุง ุจุชุดุชุบู ู
ุน Inheritanceุ ููู 6 ููุงุนุฏ ู
ูู
ุฉ ูุงุฒู
ุชุชุนูู
ูุง ูุชูุชูุฑูุง. ุฎูููุง ูุชุนูู
ูู
ูุงุญุฏุฉ ูุงุญุฏุฉ.
Rule 1: Parent Constructor Accessibility
ูู C#ุ ูุงุฒู
ุงูู constructor ุจุชุงุน ุงูู parent class ูููู ู
ุชุงุญ ุงููุตูู ููู ู
ู ุงูู child classุ ูุฅูุงุ ุงูู inheritance ู
ุด ููุจูู ู
ู
ูู. ุงูุณุจุจ ูู ุฅููุง ูู
ุง ุจูุนู
ู object ู
ู ุงูู child classุ ุฃูู ุญุงุฌุฉ ุจูุนู
ููุง ูู ุฅูู ุจูุฑูุญ ููุงุฏู ุงูู constructor ุจุชุงุน ุงูู parent class ุนุดุงู ู
ุชุบูุฑุงุช ุงูู parent class ูุญุตููุง initialization ูููุฏุฑ ูุณุชุฎุฏู
ูุง ุฌูู ุงูู child class.
ูู ู
ุซุงููุง ุงูุญุงููุ class A ู class B ุงูุงุชููู ุนูุฏูู
implicit constructors. ุฃู class ูู C# ุจูููู ููู implicit constructor ูู ุฅุญูุง ูู
ุทูุฑูู ู
ุนุฑููุงุด ุฃู constructor ุจุดูู ุตุฑูุญ.
ูู ุงูู constructor ู
ุชุนุฑู ุจุดูู implicitุ ููู ุจูุจูู public. ูู ู
ุซุงููุงุ class B ููุฏุฑ ููุตู ููู implicit constructor ุจุชุงุน class A ูุฃูู public.
ุฏูููุชูุ ุฎูููุง ูุนุฑูู constructor ุตุฑูุญ ูู Class A:
class A
{
public A()
{
Console.WriteLine("Class A Constructor is Called");
}
// ... methods
}ู
ุน ุงูุชุบููุฑ ุฏูุ ูู ุดุบูุช ุงูุชุทุจููุ ูุชูุงูู ุงูู output ูุงูุชุงูู:
Class A Constructor is Called
Method 1
Method 2
ุฏู ูุฅู ูู
ุง ุจูุชู
ุฅูุดุงุก instance ู
ู ุงูู child classุ ุงูู constructor ุจุชุงุน ุงูู child class ุจููุงุฏู ุจุดูู ุถู
ูู (implicitly) ุนูู ุงูู constructor ุจุชุงุน ุงูู parent class ุจุชุงุนู. ุฏู ูุงุนุฏุฉ.
ููู ูู ุฎููุช ุงูู constructor ุจุชุงุน A ุจุฑุงููุช privateุ ููุญุตู compile-time error ูุฃู B ู
ุด ูููุฏุฑ ููุตูู.
class A
{
A() // By default, this is private
{
Console.WriteLine("Class A Constructor is Called");
}
// ... methods
}ุงูู Error ููููู: Class A Constructor is inaccessible due to its protection level.
ุฎูููุง ูุนุฑูู constructor ูู Class B ุจุฑุถู:
using System;
namespace InheritanceDemo
{
class A
{
public A()
{
Console.WriteLine("Class A Constructor is Called");
}
// ... methods
}
class B : A
{
B()
{
Console.WriteLine("Class B Constructor is Called");
}
// ... Method3 and Main
}
}Output:
Class A Constructor is Called
Class B Constructor is Called
Method 1
Method 2
Method 3
ุฒู ู
ุง ุดุงูู ูู ุงูู outputุ ุงูุฃูู ุงูู constructor ุจุชุงุน Class A ุจูุชูุงุฏูุ ูุจุนุฏูู ุงูู constructor ุจุชุงุน Class B. ุงูุชูููุฐ ุฏุงูู
ูุง ุจูุจุฏุฃ ู
ู ุงูู constructor ุจุชุงุน ุงูู Parent class.
ุณุคุงู: ููู ุงูู constructor ุจุชุงุน Class B ู
ุด publicุ
ุงูู constructor ุจุชุงุน B ู
ุด ู
ุญุชุงุฌ ูููู public ุฅูุง ูู ูุงู ููู class ุชุงูู ุจููุฑุซ ู
ูู. ุงูู constructor ุจุชุงุน A ูู ุงููู ูุงุฒู
ูููู ู
ุชุงุญ ูู B.
ุณุคุงู: ููู ูุงุฒู
ุงูู parent constructor ูููู ู
ุชุงุญ ููู childุ
ูุฃู ูู
ุง ุงูู parent constructor ุจูุชูุงุฏูุ ุจูุญุตู initialization ููู members ุจุชูุน ุงูู parentุ ูุจุนุฏูุง ุจุณ ููุฏุฑ ูุณุชุฎุฏู
ูู
ูู ุงูู child class. ูู ุงูู members ุฏูู ู
ุญุตููู
ุด initializationุ ู
ุด ูุชูุฏุฑ ุชุณุชุฎุฏู
ูู
.
Rule 2: Parent Cannot Access Child Members
ูู ุงูู inheritanceุ ุงูู child class ููุฏุฑ ููุตู ููู members ุจุชูุน ุงูู parent classุ ููู ุงูู parent classes ุนู
ุฑูุง ู
ุง ุชูุฏุฑ ุชูุตู ูุฃู members ู
ุชุนุฑูุฉ ุจุดูู ุฎุงูุต ูู ุงูู child class.
ุฒู ุงููุงูููุ ุงูุฃุจูุงุก ูููู
ุญููู ูู ู
ู
ุชููุงุช ุฃูููู
ุ ููู ุงูุฃูู ู
ุงููู
ุด ุญููู ูู ู
ู
ุชููุงุช ุฃุจูุงุฆูู
. ุจููุณ ุงูุทุฑููุฉุ ุงูู Parent class ุนู
ุฑู ู
ุง ููุฏุฑ ููุตู ููู members ุจุชูุน ุงูู child class ุงููู ู
ุชุนุฑููู ุฌูุงู ุจุณ.
ุดูู ุงูููุฏ ุฏู. ุฌูู ุงูู Main methodุ ุจูุนู
ู instance ู
ู ุงูู Parent class A ูุจูุญุงูู ูุณุชุฏุนู Method3 ุงููู ู
ุชุนุฑู ูู Child class B. ููุญุตู compile-time error.
static void Main()
{
A obj = new A();
obj.Method1();
obj.Method2();
// The following line of code gives you compile time error
obj.Method3();
Console.ReadKey();
}ุงูู Error ุจูููู: class โAโ does not contain a definition for โMethod3โ.
Rule 3: Parent Variable as a Reference to Child Instance
ููุฏุฑ ูุนู
ู initialize ูู
ุชุบูุฑ ู
ู ููุน ุงูู parent class ุจุงุณุชุฎุฏุงู
instance ู
ู ุงูู child class ุนุดุงู ูุฎููู reference variable. ุงูู reference ุฏู ููุณุชููู ุงูุฐุงูุฑุฉ ุจุชุงุนุฉ ุงูู child class instance. ููู ุญุชู ูู ุงูุญุงูุฉ ุฏูุ ู
ููุฏุฑุด ููุงุฏู ุฃู pure child class members ุจุงุณุชุฎุฏุงู
ุงูู reference ุฏู.
ุงูู Reference ูู ู
ุคุดุฑ ูู instance ูู
ุจููููุด ููู ุชุฎุตูุต ุฐุงูุฑุฉ ุฎุงุต ุจูู.
ูู ุนู
ููุง ูุฏูุ ููุญุตู error ูุฅู ุงูู
ุชุบูุฑ p ู
ุด ู
ุนู
ููู initialization:
A p; // p is an unassigned variable of class A
p.Method1(); // Compile Time Error: Use of unassigned local variable โpโุนุดุงู ูุนู
ู initializationุ ุจูุณุชุฎุฏู
ุงูู new keyword. ูู ุงูู
ุซุงู ุฏูุ ุนู
ููุง initialize ูู
ุชุบูุฑ p ุจุงุณุชุฎุฏุงู
instance ู
ู B:
static void Main()
{
A p; // p is a variable of class A
B q = new B(); // q is an instance of Class B
// We can initialize a Parent class variable using child class instance
p = q; // now, p is a reference to q's memory
// Now you can call members of A class
p.Method1();
p.Method2();
// We cannot call any pure child class members using the reference p
// p.Method3(); // This would cause a compile-time error
Console.ReadKey();
}ู
ูุงุญุธุฉ: ุชุฎุตูุต ุงูุฐุงูุฑุฉ ุจูุชู
ููู instancesุ ู
ุด ููู references. ุงูู References ู
ุฌุฑุฏ ู
ุคุดุฑุงุช ููู instances.
ุจุงูุฑุบู
ู
ู ุฅู p ู q ุจูุดุงูุฑูุง ุนูู ููุณ ู
ูุงู ุงูุฐุงูุฑุฉุ ุจุงุณุชุฎุฏุงู
pุ ู
ูุฏุฑุด ุฃูุงุฏู ุฃู members ุฎุงุตุฉ ุจู class B. ููู ุจุงุณุชุฎุฏุงู
qุ ุฃูุฏุฑ ุฃูุงุฏู ุงูู members ุจุชูุน A ู B ุงูุงุชููู.
Rule 4: The Default Parent Class is Object
ูู class ุณูุงุก ุฅุญูุง ุงููู ู
ุนุฑูููู ุฃู ู
ุชุนุฑู ู
ุณุจููุง ูู ู
ูุชุจุงุช ุงููุบุฉุ ููู parent class ุงูุชุฑุงุถูุ ููู Object class ุงููู ู
ูุฌูุฏ ูู ุงูู System namespace. ุนุดุงู ูุฏูุ ุงูู members ุจุชูุน ุงูู Object class (Equals, GetHashCode, GetType, ToString) ู
ุชุงุญูู ูู ุฃู ู
ูุงู.
ูู
ุง ุจุชุนุฑู classุ ุญุชู ูู ู
ุนู
ูุชุด inheritance ู
ู ุฃู class ุชุงููุ ุงูู compiler ุจูุฎููู ููุฑุซ ู
ู Object class ุชููุงุฆููุง.
ูู ู
ุซุงููุงุ class A ุจููุฑุซ ู
ู Object. ู class B ุจููุฑุซ ู
ู A. ุฏู ู
ุนูุงู ุฅู Object ูุนุชุจุฑ grandparent ูู class B.
ุฅูู ูู ุงูู Default Parent Class ูู C#ุ
ูู Object class ุงููู ู
ูุฌูุฏ ูู System namespace.
ุงูู
ุซุงู ุฏู ุจููุถุญ ุฅุฒุงู GetType() ุจุชุฑุฌุน ุงูู runtime type ุจุชุงุน ูู instance:
static void Main()
{
Object obj1 = new Object();
Console.WriteLine($"obj1 type: {obj1.GetType()}");
A obj2 = new A();
Console.WriteLine($"obj2 type: {obj2.GetType()}");
B obj3 = new B();
Console.WriteLine($"obj3 type: {obj3.GetType()}");
Console.ReadKey();
}Output:
obj1 type: System.Object
Class A Constructor is Called
obj2 type: InheritanceDemo.A
Class A Constructor is Called
Class B Constructor is Called
obj3 type: InheritanceDemo.B
Rule 5: No Multiple Inheritance with Classes
ูู C#ุ ู
ููุด ุฏุนู
ููู multiple inheritance (ุงููุฑุงุซุฉ ุงูู
ุชุนุฏุฏุฉ) ุนู ุทุฑูู ุงูู classes. ุงููู ู
ุชุงุญ ูููุง ูู Single Inheritance ุจุณ. ุฏู ู
ุนูุงู ุฅู ุงูู class ู
ุณู
ูุญูู ูููู ุนูุฏู parent class ู
ุจุงุดุฑ ูุงุญุฏ ุจุณ.
ูุนูู (Single, Multilevel, Hierarchical) ู
ุฏุนูู
ููุ ููู (Multiple, Hybrid) ู
ุด ู
ุฏุนูู
ูู.
Rule 6: Handling Parameterized Parent Constructors
ูู Rule1ุ ุนุฑููุง ุฅู ุงูู child constructor ุจููุงุฏู ุถู
ูููุง ุนูู ุงูู parent constructorุ ุจุณ ุฏู ูู ูุงู parameterless (ู
ุจูุงุฎุฏุด parameters).
ูู ุงูู constructor ุจุชุงุน ุงูู Parent class ูุงู parameterizedุ ุงูู Child class constructor ู
ุด ูููุฏุฑ ููุงุฏูู ุถู
ูููุง. ุนุดุงู ูุญู ุงูู
ุดููุฉ ุฏูุ ู
ุณุคูููุฉ ุงูู
ุจุฑู
ุฌ ุฅูู ููุงุฏู ุจุดูู ุตุฑูุญ (explicitly) ุนูู ุงูู Parent constructor ู
ู ุงูู child constructor ููุจุนุชูู ููู
ููู parameters. ุนุดุงู ูุนู
ู ูุฏูุ ุจูุณุชุฎุฏู
ุงูู base keyword.
ูู ุฎูููุง ุงูู constructor ุจุชุงุน A ูุงุฎุฏ parameterุ ููุญุตู error ูู B:
class A
{
public A(int number) // Parameterized constructor
{
Console.WriteLine($"Class A Constructor is Called : {number}");
}
}
class B : A
{
public B() // Error here!
{
Console.WriteLine("Class B Constructor is Called");
}
}ุงูู Error ุจูููู: There is no argument given that corresponds to the required formal parameter โnumberโ of โA.A(int)โ. ุงูู constructor ุจุชุงุน B ู
ุด ุนุงุฑู ูุจุนุช ููู
ุฉ ุฅูู ููู constructor ุจุชุงุน A.
ุงูุญู ูู ุฅููุง ูุณุชุฎุฏู
base ุนุดุงู ูุจุนุช ุงูููู
ุฉ ุจุดูู ุตุฑูุญ:
public B() : base(10) // Explicitly call parent constructor with value 10
{
Console.WriteLine("Class B Constructor is Called");
}ุงูููุฏ ุงููุงู ู:
using System;
namespace InheritanceDemo
{
class A
{
public A(int number)
{
Console.WriteLine($"Class A Constructor is Called : {number}");
}
}
class B : A
{
public B() : base(10)
{
Console.WriteLine("Class B Constructor is Called");
}
static void Main()
{
B obj = new B();
Console.ReadKey();
}
}
}Output:
Class A Constructor is Called : 10
Class B Constructor is Called
How to pass dynamic value to Parent class constructor in C#?
ู
ู
ูู ูู
ุงู ูุจุนุช ููู
ุฉ ุฏููุงู
ูููุฉ ู
ู Main ูู B ูู
ู B ูู A:
class B : A
{
// Take a parameter in the child constructor
public B(int num) : base(num) // Pass it to the parent constructor
{
Console.WriteLine("Class B Constructor is Called");
}
static void Main()
{
B obj1 = new B(10);
B obj2 = new B(20);
B obj3 = new B(30);
Console.ReadKey();
}
}Output:
Class A Constructor is Called : 10
Class B Constructor is Called
Class A Constructor is Called : 20
Class B Constructor is Called
Class A Constructor is Called : 30
Class B Constructor is Called
ุฏู ูู ุงูุณุช ููุงุนุฏ ุงููู ุงูู
ูุฑูุถ ุชูุชูุฑูุง ูุฅูุช ุดุบุงู ู
ุน ุงูู Inheritance ูู C#.
Advantages of Inheritance in C#
- Code reusability (ุฅุนุงุฏุฉ ุงุณุชุฎุฏุงู
ุงูููุฏ): ุจููุฏุฑ ูุนูุฏ ุงุณุชุฎุฏุงู
ุงูู
membersุจุชูุน ุงููparent classูู ุงููchild class. ูู ุด ู ุญุชุงุฌูู ูุนูุฏ ุชุนุฑูู ุงููmembersุชุงูู ูู ุงููchild class. ูุฏู ุจูููู ุงูููุฏ ุงูู ุทููุจ ูู ุงููclass.