Monday, November 8, 2021

C# abstract Keyword Explanation in Hindi

C# प्रोग्रामिंग लैंग्वेज में abstract कीवर्ड का उपयोग abstract  क्लास और abstract मेथड के declaration में  किया जाता  है। abstract  क्लास ऐसे क्लास है जो पूरी तरह विकसित नहीं है। इसका अभिप्राय यह है abstract क्लास का कोई ऑब्जेक्ट बनाया नहीं जा सकता है।

abstract कीवर्ड को समझने के लिए हम माता के गर्भ में पलने वाले भ्रूण का उदाहरण ध्यान में रख सकते हैं। जिस प्रकार भ्रूण के अंग विकसित नहीं होते हैं और भ्रूण के लिंग की भी पहचान करना कई बार संभव नहीं होता है, ठीक उसी प्रकार जब कोई क्लास abstract होता है तो उस क्लास का मेंबर अर्थात अंग ऐसा भी हो सकता है जो abstract हो, अपूर्ण हो, अविकसित हो। कहने का अभिप्राय यह है कि abstract क्लास के कुछ मेंबर abstract हो सकते हैं और कुछ विकसित अर्थात concrete हो सकते हैं। उदाहरण के लिए abstract क्लास के भीतर इसके अंग अर्थात मेथड प्रॉपर्टी इंडक्शर और इवेंट abstract हो भी सकते हैं और नहीं भी। 

ऐसा कोई जरूरी नहीं है कि abstract क्लास के मेंबर abstract हों परंतु कोई भी क्लास अगर उसको abstract डिक्लेअर घोषित किया गया है तो उसके मेंबर abstract हो अथवा ना हो वह क्लास abstract होगा और उसका कोई object नहीं बनाया जा सकता है। 

abstract क्लास के भीतर कुछ मेंबर abstract और कुछ मेम्बर concrete हो सकता है। यह ठीक वैसे ही है जैसे भ्रूण का कुछ अंग विकसित हो सकता है और कुछ अंग अविकसित।

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की भाषा में कहें तो इसका अर्थ यह होता है कि abstract क्लास का कोई इंप्लीमेंटेशन नहीं होता है अर्थात उस क्लास का ऑब्जेक्ट नहीं बनाया जा सकता है। इसका दूसरा अर्थ यह निकलता है कि इस क्लास का derived क्लास बनेगा और यह derived class उस abstract क्लास को इंप्लीमेंट करेगा। लेकिन अगर derived क्लास भी एब्स्ट्रेक्ट क्लास को पूरी तरह इंप्लीमेंट नहीं करें तो ऐसी हालत में यह derived क्लास एक एब्स्ट्रेक्ट क्लास बन जाएगा, यह बात समझने लायक है। कहने का अर्थ यह है कि जब तक किसी एब्स्ट्रेक्ट क्लास के सारे methods, properties, indexer, events इत्यादि को इंप्लीमेंट नहीं कर लिया जाता है तब तक वह derived क्लास concrete क्लास नहीं होगा बल्कि abstract होगा।

जब किसी क्लास के किसी मेंबर को abstract घोषित किया जाता है तो वह क्लास स्वतः abstract हो जाता है। कहने का अभिप्राय यह है कि जब हम किसी क्लास के मेंबर को abstract घोषित करते हैं तो उस क्लास के साथ abstract कीवर्ड देना जरूरी होता है। abstract क्लास का सीधा सा अर्थ है कि वह क्लास पूर्ण नहीं है, concrete नहीं है। जब किसी क्लास का मेम्बर abstract है अर्थात अपूर्ण है तो उस क्लास को पूर्ण मानना ही मूर्खता होगी। यही कारण है कि जब किसी class का मेम्बर abstract घोषित किया गया हो तो उस क्लास को भी abstract घोषित करना होगा।

abstract कीवर्ड अपूर्णता को व्यक्त करता है चाहे वह क्लास हो अथवा क्लास का कोई मेम्बर। abstract class की पूर्णता derived class में हो सकती है। इसी तरह abstract method अपूर्ण होता है उसकी पूर्णता override method द्वारा होती है। abstract method की body नहीं होती है। पूर्णता से अभिप्राय पूरी तरह इम्पलीमेंटेशन से है। override का अर्थ होता है बदलाव। बदलाव से अभिप्राय यहाँ उस क्लास मेम्बर को पूर्णता दिलाने से है।

उदाहरण १
abstract class Shape
{
    public abstract int GetArea();
}

class Square : Shape
{
    int side;

    public Square(int n) => side = n;

    // GetArea method is required to avoid a compile-time error.
    public override int GetArea() => side * side;

    static void Main()
    {
        var sq = new Square(12);
        Console.WriteLine($"Area of the square = {sq.GetArea()}");
    }
}

// Output: Area of the square = 144
  
उदाहरण २ निम्न उदाहरण में एब्सट्रेक्ट मेथड और एब्सट्रेक्ट प्रोपर्टी को व्यक्त किया गया है। इन दोनों को ही व्युत्पन्न क्लास में override किया गया है। override कीवर्ड पर ध्यान दीजिए।
abstract class BaseClass   // Abstract class
{
    protected int _x = 100;
    protected int _y = 150;
    public abstract void AbstractMethod();   // Abstract method
    public abstract int X    { get; }
    public abstract int Y    { get; }
}

class DerivedClass : BaseClass
{
    public override void AbstractMethod()
    {
        _x++;
        _y++;
    }

    public override int X   // overriding property
    {
        get
        {
            return _x + 10;
        }
    }

    public override int Y   // overriding property
    {
        get
        {
            return _y + 10;
        }
    }

    static void Main()
    {
        var o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine($"x = {o.X}, y = {o.Y}");
    }
}

// Output: x = 111, y = 161

© अजीत कुमार, सर्वाधिकार सुरक्षित।

इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।

No comments:

Post a Comment

Hot Topics