Introduction
ูู ุงูู
ูุงู ุฏูุ ููุชููู
ุนู ุงูู Abstract Classes ูุงูู Methods ูู C# ุจุงูุฃู
ุซูุฉ. ูุง ุฑูุช ุชูุฑุง ู
ูุงููุง ุงููู ูุงุช ุงููู ุงุชููู
ูุง ููู ุนู ุงูู Generalization ูุงูู Specialization ูู C#.
What are Abstract Methods in C#?
ูู C#ุ ุงูู abstract methods ูู methods ุจูุนุฑููุง ุฌูู abstract class ุฃู interface ุจุณ ู
ุจุชูููุด ูููุง body ุฃู implementation ูู ุงูู class ุฃู ุงูู interface ุงููู ุจูุนุฑููุง. ุจุฏู ูุฏูุ ู
ุณุคูููุฉ ุชูููุฐ ุงูู method ุฏู ุจุชุชููู ูุฃู concrete (non-abstract) class ุจููุฑุซ ู
ู ุงูู abstract class ุฏู ุฃู ุจูููุฐ ุงูู interface ุฏู.
ุงูู method ุงููู ู
ู ุบูุฑ body ุจุชุชุนุฑู ุนูู ุฅููุง Abstract Method. ุงููู ุงูู method ุจูุญุชููู ูู ู
ุฌุฑุฏ (declaration). ุฏู ู
ุนูุงู ุฅู ุงูู abstract method ุจุชุญุชูู ุนูู ุชุนุฑูููุง ุจุณุ ู
ู ุบูุฑ implementation.
ุงูู method ุงููู ุฌุงูุฉ ุฏู non-abstract ูุฅููุง ุจุชุญุชูู ุนูู body:
public void Add(int num1, int num2)
{
// Method body
}ููู ู
ู ุบูุฑ ู
ุง ููุชุจ method bodyุ ูู ููููุง ุงูู method ุจู semicolon (;) ุฒู ูุฏูุ ุจุชุชุณู
ู Abstract Method:
public void Add(int num1, int num2);ููู ุงูุชูุฑุ ูู ุนุงูุฒ ุชุฎูู ุฃู method ุชุจูู abstract methodุ ูุงุฒู
ุชุณุชุฎุฏู
ุงูู abstract modifier ุจุดูู ุตุฑูุญ ูุงูุชุงูู. ูุจู
ุฌุฑุฏ ู
ุง ุชุณุชุฎุฏู
ุงูู abstract modifierุ ุงูู method ูุชุชุณู
ู abstract method ุชููุงุฆููุง.
public abstract void Add(int num1, int num2);ุทูุจุ ุฅูู ูู ุงูู abstract classesุ
What are Abstract Classes in C#?
ูู C#ุ ุงูู abstract class ูู class ุจูุดุชุบู ูู blueprint (ู
ุฎุทุท) ููู classes ุงูุชุงููุฉ. ุงูู Abstract classes ู
ูููุนุด ูุนู
ููุง instantiated ุจุดูู ู
ุจุงุดุฑ (ูุนูู ู
ูููุนุด ูุนุฑู ู
ููุง Object ุจุดูู ู
ุจุงุดุฑ)ุ ููู ู
ู
ูู ูุณุชุฎุฏู
ูุง ูู base classes ููู classes ุงูุชุงููุฉ ุงููู ุจุชูุฑุซ ู
ููุง. ุงูู Abstract classes ุจูุชู
ุชุนุฑูููุง ุจุงุณุชุฎุฏุงู
ุงูู abstract keyword. ุบุงูุจูุง ุจุชุนุฑูู ู
ุฌู
ูุนุฉ ู
ุดุชุฑูุฉ ู
ู ุงูุฎุตุงุฆุต ุฃู ุงูุณููููุงุช ุงููู ุงูู
ูุฑูุถ ุชููู ู
ุดุชุฑูุฉ ุจูู ุฃูุชุฑ ู
ู derived class.
ุงูู class ุงููู ุจูุนุฑูู ุฌูุงู abstract methods ุจูุชุนุฑู ุนูู ุฅูู abstract class. ุญุณุจ OOPุ ุฅุญูุง ู
ุญุชุงุฌูู ูุนุฑูู ุงูู method ุฌูู class. ู
ููุฏุฑุด ูุนุฑูู abstract methods ูู ุฃู ู
ูุงู ุจุดูู ู
ุจุงุดุฑ. ูุงุฒู
ูุนุฑูู ุงูู abstract method ุฌูู abstract class ุจุณ.
ุงูุชุฑุถ ุฅููุง ูุงุฒู
ููุชุจ ุงูู Add abstract method ุงููู ูุงุชุช ุฌูู Calculator class. ุณุงุนุชูุงุ ุงูู class ุฏู ูุงุฒู
ูุชู
ุชุนุฑููู ุจุงุณุชุฎุฏุงู
ุงูู abstract modifier ูุงูุชุงูู:
public abstract class Calculator
{
public abstract void Add(int num1, int num2);
}ููู class ุฌูุงูุง ุฃู abstract methodsุ ูุงุฒู
ูุญุชู
ูุง ูุชู
ุงูุฅุนูุงู ุนูู ุจุงุณุชุฎุฏุงู
ุงูู abstract modifierุ ููู
ุง class ุจูุชุนู
ู ุจุงุณุชุฎุฏุงู
abstract modifierุ ุจูุชุณู
ู Abstract class ูู C#.
ุนู
ูู
ูุงุ ูู
ุง ุจูุนุฑูู abstract classุ ุจูุฌูููุง ุดู: ู
ู ุบูุฑ method bodyุ ุฅูู ูุชููู ูุงูุฏุฉ ุงูู method ุฏูุ ุฎูููุง ูููู
ุฏู.
What is the use of the Abstract Method in C#?
ูู method ุชู
ุงูุฅุนูุงู ุนููุง ูู abstract ุชุญุช ุฃู classุ ูุจูู ุงูู child class ุจุชุงุน ุงูู abstract class ุฏู ู
ุณุคูู ุนู ุชูููุฐ (implementing) ุงูู abstract method ุฏู ู
ู ุบูุฑ ุฃู ุชูุตูุฑ.
ูู ุงูู inheritanceุ ุดููุง ุฅู ุงูู Parent class ุจูููุฑ ุดููุฉ ุฎุตุงุฆุต ููู Child class ุนุดุงู ูุณุชุฎุฏู
ูุง. ููุง ุจุฑุถู ุงูู inheritance ุจูุฏุฎู ูู ุงูุตูุฑุฉุ ููู ุงูููุทุฉ ุงููู ูุงุฒู
ุชูุชูุฑูุง ูู ุฅู ุงูู Parent class ุจูููู abstractุ ููู ู
ุด ููููุฑ ุฃู ุฎุตุงุฆุต ููู Child class ุนุดุงู ูุณุชุฎุฏู
ูุง. ุจุงูุนูุณุ ูู ุจููุฑุถ ุดููุฉ ูููุฏ (restrictions) ุนูู ุงูู Child classes. ูุงูุฃุจูุงุก ุฃู ุงูู Child classes ูุงุฒู
ูุชุจุนูุง ุฃู ููููุง ุจุงููููุฏ ุฏู. ูุฏู ูู ุงูููุฑุฉ ุงูุฃุณุงุณูุฉ ููู abstract class ูู C#.
ู
ูุงุญุธุฉ: ูู abstract method ุจูุชู
ุงูุฅุนูุงู ุนููุง ุฌูู abstract class ูุงุฒู
ูุญุชู
ูุง ูุชู
ุชูููุฐูุง ู
ู ุฎูุงู ุงูู Child classes ู
ู ุบูุฑ ุฃู ุชูุตูุฑุ ูุฅูุงุ ููุฌูููุง compile-time error.
Is Abstract Class Containing Only Abstract Methods in C#?
ู
ุชูุชูุฑุด ุฅู abstract class ู
ู
ูู ูุญุชูู ุนูู abstract methods ุจุณ. ูู ู
ู
ูู ูุญุชูู ูู
ุงู ุนูู non-abstract methods. ูุงุฒู
ุชูุชูุฑ ุฅู ูู class ูุงู non-abstractุ ููู ุจูุญุชูู ุนูู non-abstract methods ุจุณุ ููู ูู class ูุงู abstractุ ููู ู
ู
ูู ูุญุชูู ุนูู ุงูุงุชูููุ abstract ู non-abstract methods ูู C#.
Who will Provide the Implementation of Abstract Methods in C#?
ุงูุฅุฌุงุจุฉ ูู ุงูู Child Class. ูู ุนูุฏู child class ูู abstract classุ ูู
ุณุคูููุฉ ุงูู child class ุฅูู ูููุฑ ุงูู implementation ููู ุงูู abstract methods ุจุชุงุนุฉ ุงูู parent class. ู
ุชูุฏุฑุด ุชูุฑุจ ู
ู ุฏู. ูู method ูุงุฒู
ูุชู
ุชูููุฐูุง. ูู ููุฐุช ูู ุงูู abstract methodsุ ุณุงุนุชูุง ุจุณ ุชูุฏุฑ ุชุณุชุฎุฏู
ุงูู non-abstract method ุจุชุงุนุฉ ุงูู Parent class.
ุนู
ูู
ูุงุ ุดููุง ูู ุงูู Inheritance ุฅู ุงูู child class ููุฏุฑ ูุณุชุฎุฏู
ุงูู members ุจุชูุน ุงูู parent class ู
ุจุงุดุฑุฉ. ููู ููุงุ ุฏู ู
ุด ู
ู
ูู. ู
ุชูุฏุฑุด ุชุณุชุฎุฏู
ูู
ู
ุจุงุดุฑุฉ. ุงูุฎุงุตูุฉ ุฏู ุชุญุช ูููุฏ. ูุญุฏ ู
ุง ุงูู child class ูููู ุจุงููููุฏุ ู
ุด ูููุฏุฑ ูุณุชุฎุฏู
ุงูู parent class members.
ู ุซุงู ู ู ุงููุงูุน: ุงูุชุฑุถ ุฅู ุฃุจ ูุนุฏ ุงุจูู ุฅูู ูู ุฌุงุจ 90% ูู ุงู ุชุญุงู ุขุฎุฑ ุงูุณูุฉุ ูููุงูุฆู ุจูุงุจุชูุจ. ูุงููุงุจุชูุจ ููุชุฌุงุจ ููุงุจู ุจุณ ูู ุฌุงุจ 90%. ูู ุงูุงุจู ุนุงูุฒ ูุงุฎุฏ ุงููุงุจุชูุจุ ูุงุฒู ูููู ุจุงูู ุชุทูุจุงุช ุงููู ุญุทูุง ุฃุจูู. ุจู ุฌุฑุฏ ู ุง ุงูุงุจู ูููู ุจุงูู ุชุทูุจุ ุจูุงุฎุฏ ุงููุงุจุชูุจ.
ุฏู ุจุงูุธุจุท ููุณ ุญุงูุฉ ุงูู abstract class. ุงูู abstract class ุจูุญุชูู ุนูู abstract ู non-abstract methods. ู
ู
ูู ุชุนุชุจุฑ ุงูู abstract method ูู ุงูุฏุฑุฌุงุช ุงููู ูุงุฒู
ูุฌูุจูุงุ ูุงูู non-abstract method ูู ุงููุงุจุชูุจ. ููู ุนุงูุฒ ุชุงุฎุฏ ุงููุงุจุชูุจ (ุชุณุชุฎุฏู
non-abstract method)ุ ูุงุฒู
ุชููู ุจุงูู
ุชุทูุจุงุช (ุชููุฐ ูู ุงูู abstract methods).
ู
ูุงุญุธุฉ: ุนุดุงู ูุนุฑูู method ุฃู class ูู abstractุ ุจูุณุชุฎุฏู
ุงูู abstract keyword.
Example to Understand Abstract Class and Abstract Methods in C#
ุฎูููุง ูููู
ุงูู Abstract Class ูุงูู Abstract Methods ูู C# ุจู
ุซุงู. ุจุต ุนูู ุงูู class ุงููู ุฌุงู. ุฏู ููููู ุงูู parent abstract class ุจุชุงุนูุง. ูู ุงูู class ุฏูุ ุนุฑููุง ุงุชููู non-abstract methodsุ ูู
ุง Add ู Subุ ูุงุชููู abstract methodsุ ูู
ุง Mul ู Div.
// The parent abstract class
public abstract class AbsParent
{
// Non-abstract method with implementation
public void Add(int x, int y)
{
Console.WriteLine($"Addition of {x} and {y} is : {x + y}");
}
// Non-abstract method with implementation
public void Sub(int x, int y)
{
Console.WriteLine($"Subtraction of {x} and {y} is : {x - y}");
}
// Abstract method without implementation
public abstract void Mul(int x, int y);
// Abstract method without implementation
public abstract void Div(int x, int y);
}Can we create an instance of an abstract class in C#?
ูุฃ. ู
ููุฏุฑุด ูุนู
ู instance ู
ู abstract class. ุณูุงุก ุงูู abstract class ุจูุญุชูู ุนูู abstract methods ุฃู ูุฃุ ุฅูุดุงุก instance ู
ูู ู
ุณุชุญูู. ูู ุญุงููุชุ ููุฌููู compile-time error.
ุงูุณุจุจ ูู ุฅู ูู ุงูู compiler ุณู
ุญ ููุง ูุนู
ู instanceุ ูุจุงุณุชุฎุฏุงู
ุงูู instance ุฏูุ ูุชูุฏุฑ ุชูุงุฏู ุงูู abstract methods ุงููู ู
ุนูุฏูุงุด bodyุ ูุฏู ูู ุงูุณุจุจ ุงููู ุจูุฎููู ู
ูุณู
ุญุด ููุง ูุนู
ู instance ู
ู abstract class.
ุงูู child class ูู ุงููู ููุฏุฑ ูุณุชุฎุฏู
ุงูู members ุฏู. ุงูู child class ูุงุฒู
ูุนู
ู implement ููู Mul ูุงูู Div abstract methods ูุจู ู
ุง ููุฏุฑ ูุณุชุฎุฏู
Add ู Sub. ูู ู
ุนู
ูุด ูุฏูุ ููุญุตู compile-time error.
Why Abstract Class Cannot Be Instantiated in C#?
ูุฅู ุงูู abstract methods ุจุชุงุนุชู ู
ุจุชูููุด ูุงุจูุฉ ููุชูููุฐ ูุฃูู ู
ุด class ู
ูุชู
ู ุงูุชูููุฐ (fully implemented). ูู ุงูู compiler ุณู
ุญ ููุง ูุนู
ู object ู
ู abstract classุ ูููุฏุฑ ูุณุชุฏุนู ุงูู abstract method ุจุงุณุชุฎุฏุงู
ุงูู object ุฏูุ ูุงูู CLR ู
ุด ูููุฏุฑ ูููุฐูุง ููุช ุงูุชุดุบูู (runtime). ุนุดุงู ูุฏูุ ุนุดุงู ูู
ูุน ุงูู ุชูุงุฏู ุงูู abstract methodsุ ุงูู compiler ู
ุจูุณู
ุญุด ููุง ูุนู
ู instantiate ูู abstract class.
ุฏูููุชูุ ุฎูููุง ูููุฐ ุงูุงุชููู abstract methods ุฌูู ุงูู child class. ูุงุฒู
ูุนู
ู Implement ููู abstract methods ุจุงุณุชุฎุฏุงู
ุงู-override modifier ูุงูุชุงูู:
public class AbsChild : AbsParent
{
// Providing implementation for the abstract method
public override void Mul(int x, int y)
{
Console.WriteLine($"Multiplication of {x} and {y} is : {x * y}");
}
// Providing implementation for the abstract method
public override void Div(int x, int y)
{
Console.WriteLine($"Division of {x} and {y} is : {x / y}");
}
}ุฏูููุชู ู
ููุด compile-time error. ุงูู child class ุฃููู ุจู
ุชุทูุจุงุช ุงูู parent class ุจุชูููุฐู ููู abstract methodsุ ุจุงูุชุงููุ ุงูู child class ููุฏุฑ ุฏูููุชู ูุณุชุฎุฏู
ุงูู non-abstract methods ุจุชุงุนุฉ ุงูู parent class. ูุชูุฏุฑ ุฏูููุชู ุชุนู
ู instance ู
ู ุงูู Child class ูุชุณุชุฎุฏู
ูู ุงูู members ูุงูุชุงูู:
using System;
namespace AbstractClassesAndMethods
{
class Program
{
static void Main(string[] args)
{
AbsChild absChild = new AbsChild();
absChild.Add(10, 5);
absChild.Sub(10, 5);
absChild.Mul(10, 5);
absChild.Div(10, 2);
Console.ReadKey();
}
}
public abstract class AbsParent
{
public void Add(int x, int y) { /* ... */ }
public void Sub(int x, int y) { /* ... */ }
public abstract void Mul(int x, int y);
public abstract void Div(int x, int y);
}
public class AbsChild : AbsParent
{
public override void Mul(int x, int y) { /* ... */ }
public override void Div(int x, int y) { /* ... */ }
}
}Output:
Addition of 10 and 5 is : 15
Subtraction of 10 and 5 is : 5
Multiplication of 10 and 5 is : 50
Division of 10 and 2 is : 5
Can we Create a Reference for the Abstract Class in C#?
ุฃูููุ ููุฏุฑ ูุนู
ู reference ููู abstract class ูู C#. ููู ู
ููุฏุฑุด ูุนู
ู instance ู
ูู.
ููุงุ ุนู
ููุง instance ู
ู ุงูู child classุ ูุจุนุฏูู ุนู
ููุง reference ู
ู ุงูู abstract class ุจูุดุงูุฑ ุนูู ุงูู child class instanceุ ูุจุนุฏูู ุจุงุณุชุฎุฏุงู
ุงูู reference ุฏู ููุฏุฑ ููุตู ููู members.
// Creating abstract class reference pointing to child class object
AbsParent absParent = absChild;
// Accessing methods using reference
absParent.Add(10, 5);
absParent.Sub(10, 5);
absParent.Mul(10, 5);
absParent.Div(10, 2);ูุงุฒู
ุชูุชูุฑ ุฅู ุงูู parent class referencesุ ุญุชู ูู ุงุชุนู
ูุช ุจุงุณุชุฎุฏุงู
child class instancesุ ู
ุชูุฏุฑุด ุชูุงุฏู ุงูู child class methods ุงููู ู
ุชุนุฑูุฉ ุจุดูู ูุงู
ู (pure) ูู ุงูู child class. ุงูู Overridden methods ู
ุด pure child-class methods. ูู method ู
ุนู
ูููุง override ูู ุงูู child classุ ููู ูุงุฎุฏุฉ ุฅุฐู ู
ู ุงูู parent class. ูุงูู parent class references ุชูุฏุฑ ุชูุงุฏู ุงูู overridden members ุจุชุงุนุฉ ุงูู child class ููู ู
ุชูุฏุฑุด ุชูุงุฏู ุงูู pure child class members.
ูู ุงูู
ุซุงู ุฏูุ ูู ุถููุง method ุงุณู
ูุง Mod ูู AbsChild ุจุณุ ู
ุด ูููุฏุฑ ููุตููุง ู
ู ุฎูุงู ุงูู reference ุงููู ููุนู AbsParent:
public class AbsChild : AbsParent
{
// ... Overridden methods
// Pure child class method
public void Mod(int x, int y)
{
Console.WriteLine($"Modulos of {x} and {y} is : {x % y}");
}
}
// In Main method:
// absParent.Mod(100, 35); // This will cause a compile-time errorWhen to use Abstract Classes and Methods in C#?
ุงูู
ูุฑูุถ ุชููุฑ ุชุณุชุฎุฏู
abstract classes ู methods ูู C# ูู
ุง ุชููู ุนุงูุฒ:
- ุงูู Define a Common Base: ูู
ุง ุชููู ุจุชุนุฑูู ุฃุณุงุณ ู
ุดุชุฑู ูู
ุฌู
ูุนุฉ
classesู ุฑุชุจุทุฉ ุจุจุนุถ. - ุงูู Enforce a Contract: ุงูู
Abstract methodsุจุชุณู ุญ ูู ุชูุฑุถ ุนูุฏ (contract) ูุงุฒู ุงููderived classesุชูุชุฒู ุจูู. - ุงูู Provide Default Implementations: ุชูุฏุฑ ุชููุฑ
implementationsุงูุชุฑุงุถูุฉ ูู ุงููabstract classูุงููderived classesุชุฎุชุงุฑ ุฅููุง ุชุนู ููุงoverrideุฃูextend. - ุงูู Implement Polymorphism: ูู
ุง ุฃุณุงุณููู ูุชุญููู ุงูู
polymorphism. - ุงูู Create Frameworks and Libraries: ุบุงูุจูุง ุจููุณุชุฎุฏู
ูุง ูุฅูุดุงุก
frameworksูlibrariesูAPIs. - ุงูู Extend Functionality: ุจูุณู
ุญูุง ูู ุชูุณุน ุงููุธุงุฆู ุจุทุฑููุฉ
modular. - ุงูู Ensure Code Consistency: ุจููุฑุถูุง ูููู ู
ุชุณู ูู ุงูู
derived classes. - ุงูู Enable Code Reusability: ุจูุนุฒุฒูุง ุฅุนุงุฏุฉ ุงุณุชุฎุฏุงู ุงูููุฏ.
- ุงูู Support Extension Points: ุงูู
Abstract methodsุจุชุดุชุบู ูู (extension points). - ุงูู Implement Template Method Pattern: ุจููุนุจูุง ุฏูุฑ ูู ุชุทุจูู
Template Method design pattern.
Summary of Abstract Class and Abstract Methods in C#
- ุงูู
methodุงููู ู ุนูุฏูุงุดbodyุจุชุชุณู ูabstract methodุ ูุงููclassุงููู ุจูุชู ุชุนุฑููู ุจุงุณุชุฎุฏุงูkeyword abstractุจูุชุณู ูabstract class. ููclassุจูุญุชูู ุนููabstract methodุ ูุงุฒู ูุชู ุงูุฅุนูุงู ุนูู ููabstract. - ุงูู
abstract classููุฏุฑ ูุญุชูู ุนููabstractูnon-abstract methodsู ุน ุจุนุถ. - ุงูู
abstract classุนู ุฑู ู ุง ุจูููู ูุงุจู ููุงุณุชุฎุฏุงู ูู ุญุฏ ุฐุงุชู ูุฅููุง ู ููุฏุฑุด ูุนู ูobjectู ูู. ุงููmembersุจุชุงุนุชู ู ู ูู ุจุณ ุงููchild classูุณุชุฎุฏู ูุง. - ุงูู
Abstract methodsู ููุฏุฉ ูู ุง ุชููู ุจุชูุดุฆbase classุฃูinterfaceุจูุธุงุฆู ู ุดุชุฑูุฉ ุนุงูุฒ ุงููderived classesุชูุฑุซูุงุ ููู ูู ููุณ ุงูููุช ุชุทูุจ ู ู ุงููclassesุฏู ุฅููุง ุชููุฐmethodsู ุนููุฉ ุจุทุฑููุชูุง ุงูุฎุงุตุฉ.