What is Class in C#

what is Class in C#: C# कुल 6 प्रकार के User Defined Types (Array, Enumeration, Structure, Class, Delegate, Interface) को Support करता है। जिनमें से Array, Enumeration Structure के बारे में हम पिछले Chapter में समझ चुके हैं और ये तीनों User Defined Types C/C++ में भी लगभग समान Basic Concepts के साथ Exist हैं।

Class इन सभी User Defined Types में सबसे ज्यादा महत्वपूर्ण है, जबकि DelegateInterface किसी न किसी तरह से Class पर ही निर्भर हैं, इसलिए इन बचे हुए Types में से सबसे पहले हम Class को ही ठीक से समझेंगे और चूंकि Class एक काफी बडा Concept है, इसलिए अगले कई Chapters में हम केवल Class के ही विभिन्न Aspects को पूरी तरह से Cover करने की कोशिश करेंगे।

जैसाकि हमने पिछले Section के Discussion द्वारा समझा कि C# का Class Type वास्तव में किसी Real World Problem से सम्बंधित Real World Object को Computer Program में Logically Represent करने का एक तरीका है और जिस तरह से हर Real World Object वास्तव में Characteristics व Operations का Encapsulated Unit होता है, उसी तरह से C# Class भी किसी Real World Object को Represent करते समय उसके Characteristics को Data Members व Operations को Methods के माध्‍यम से Represent करते हुए एक Encapsulated Unit के रूप में Define करता है।

सरल शब्दों में कहें तो Class Type वास्तव में एक नया User Define Type होता है, जो कि किसी Real World Object को एक Computer Program में Logically Represent करने के लिए एक Blueprint या Model  का काम करता है। परिणामस्वरूप जिस प्रकार से हम घर बनाने से पहले उसका एक Blueprint बनाते हैं, जिसके आधार पर घर का निर्माण किया जाता है, उसी प्रकार से Computer Program में कोई Object Create करने से पहले हमें उस Object का एक Description या Model बनाना होता है।

और जिस तरह से एक बार Model या Blueprint बन जाने के बाद उस Blueprint के आधार पर हम जितने चाहें, उतने घर बना सकते हैं, ठीक इसी तरह से किसी Computer Program में जब हम Current Problem Related किसी Real World Object की Characteristics Operations के आधार पर एक Class Type Define कर लेते हैं, तो उस Class Type के आधार पर हम उस Class Type के जितने चाहें उतने Instance या Object Create कर सकते हैं।

जिस तरह से किसी Primary Type जैसे कि int, char, double आदि का Variable Create किया जाता है, उसी प्रकार से किसी Class Type का भी Variable Create किया जाता है। लेकिन Class Type के Variable को Object कहा जाता है, जो कि किसी Real World Object को Computer Program में Logically एक नए Data Type या Type की तरह Represent करता है।

Class Type को हम एक प्रकार का Active Data Structure भी कह सकते हैं, क्योंकि हम इसमें किसी Real World Object की Characteristics को Data Members के रूप में Store कर सकते हैं और Methods के रूप में उसी Real World Object के Operations को Define कर सकते हैं।

Class के Field Data Class के Object की “State” को Represent करते हैं, जबकि Events, Constructors, Properties, Methods, Indexers आदि इन्हीं Data Members पर विभिन्न प्रकार के Operations Perform करके इनके मानों को Access या Modify करते हैं, जिसकी वजह से Object की स्थिति में परिवर्तन होता है।

किसी C# Class Type में किसी भी संख्‍या में Data MembersMethods हो सकते हैं, जबकि Data Members के रूप में निम्नानुसार 9 में से कोई भी Class Type का Member हो सकता है।

Data Members (Stores Data)Methods (Executes Code)
FieldsMethods
ConstantsProperties
 Constructors
 Destructors
 Operators
 Indexers
 Events

एक Running C# Program को हम Objects के एक ऐसे समूह के रूप में मान सकते हैं, जो कि आपस में एक दूसरे के साथ विभिन्न तरीकों से Interact व Communicate करते हुए विभिन्न प्रकार के Operations Perform करते हैं और विभिन्न प्रकार के Results Provide करते हैं।

Class Declaration

चूंकि Class एक User Define Type होता है, इसलिए Class को Define करने के लिए हमें Problem Related Objects को Identify करना होता है और Problem Related Objects को Abstract करके उन Characteristics का पता लगाना होता है, जिन्हें Computer Program द्वारा Manage करना है। जबकि Object द्वारा अपनी Characteristics को Access व Manipulate करते समय अपनी Characteristics की State में परिवर्तन करने के लिए Perform किए जाने वाले Operations को Identify करना होता।

जब एक बार Problem Related Object की Characteristics Operations का पता चल जाता है, तब Computer Program में उन Characteristics व Operations को Data Members Methods के रूप में Specify किया जाता है और सभी Data Members व Methods को एक Curly Braces Pair के बीच Enclose कर दिया जाता है।

Enclose करने की इस प्रक्रिया को Encapsulation कहा जाता है, क्योंकि Enclosing करके हम किसी Real World Object के Computer Representation में भी उस Real World Object की Characteristics Operations को एक Unit के रूप में Define कर रहे होते हैं।

अन्त में इस Enclosed Unit को class Keyword के साथ वही नाम Specify कर दिया जाता है, जो उन Characteristics Operation वाले Object का Real World में नाम होता है। इस तरह से बनने वाला Description या Model Problem Related किसी Real World Object को Computer Program में एक User Defined Class Type की तरह Represent करता है।

उदाहरण के लिए Watch एक Real World Object है। यदि हम हमारे C# Computer Program में किसी Watch को एक Class Type की तरह Represent करना चाहें, तो हम समझ सकते हैं कि Watch समय दिखाने का काम करता है और सामान्‍यत: Watch में समय को Hour Minute के Combination के रूप में Represent किया जाता है। इसलिए एक Watch की Problem Related Abstract Characteristics को निम्नानुसार Represent किया जा सकता है:

  • Hour
  • Minute

इसी तरह से एक Watch निम्नानुसार कुछ Operations भी Perform कर सकता है:

  • Setting New Time
  • Adding Time
  • Subtracting Time
  • Displaying Time

Class Members

किसी भी C# Class Type के मूल रूप से दो Members होते हैं, जो कि सबसे ज्यादा महत्वपूर्ण होते हैं। इन Members को Fields Methods के नाम से जाना जाता है। जहां Fields किसी Real World Object की Characteristics को Represent करते हैं, जबकि Methods उस Real World Object द्वारा Perform किए जा सकने वाले Operations को Represent करते हैं, जो कि उन Characteristics की Values में Change करते हुए Characteristics की State में परिवर्तन करते हैं।

Fields

Field, Class का Data Member होता है, जो कि केवल Particular Class से सम्बंधित होता है। Field के रूप में हम Predefined या User Defined किसी भी प्रकार के Type को Use कर सकते हैं। किसी भी अन्‍य Variable की तरह Fields भी Data Store कर सकते हैं और सभी Fields की दो मुख्‍य Characteristics होती हैं:

  • Fields में Data को Write या Set किया जा सकता है।
  • Fields के Data को Read किया जा सकता है।

C/C++ की तरह C# में Global Variables नहीं होते। इसलिए किसी भी Variable को Class से बाहर Declare नहीं किया जा सकता। साथ ही सभी Fields को हमेंशा उनके Type Declaration के साथ ही Declare करना जरूरी होता है।

Field Declaration

चूंकि Field भी एक प्रकार का Variable ही होता है, इसलिए जिस तरह से हम किसी Variable को Initialize करते हैं, उसी तरह से हम किसी Field को भी Initial Value से Initialize कर सकते हैं।

जबकि यदि हम Field Members को कोई Initial Value Initialize नहीं करते, तो C# Compiler Automatically सभी Field Members को उनके Type के आधार पर Default Values से Initialize कर देता है। जहां सभी Numerical Types का Default मान 0, Bool Type का Default मान falseReference Type का Default मान null होता है। जैसे:

class Watch
{
	byte hour = 12;		//Initialized with 12 – Value Type
	byte minute = 0;		//Initialized with 0 – Value Type
}

जिस तरह से हम एक ही समय में बहुत सारे Local Variables को Comma Separator का प्रयोग करके Declare कर सकते हैं, उसी तरह से हम बहुत सारे समान प्रकार के Field Types को भी Declare कर सकते हैं। जैसे:

class Demo
{
	byte hour, minute = 0;		//Initialized with 0 – Value Type
}

Methods

Method एक Named Block of Executable Code होता है, जिसे Program के विभिन्न Parts यहां तक कि अन्‍य Program द्वारा भी Execute किया जा सकता है।

जब किसी Method को Call या Invoke किया जाता है, तो C# Compiler Method की Body में Enter करता है और उसमें Specified सभी Executable Statements को Execute करता है। कुछ Methods Value Return कर सकते हैं, जबकि कुछ Methods किसी तरह का कोई मान Return नहीं करते। इसी तरह से कुछ Methods Arguments Accept करते हैं, जबकि कुछ Methods किसी तरह का Argument Accept नहीं करते। Methods को हम C++ व Java के Methods के समान ही समझ सकते हैं।

C# में C/C++ की तरह Global Functions नहीं होते, इसलिए किसी Program में जितने भी Functions होते हैं, वे सभी Class के अन्दर ही Define किए जाते हैं। परिणामस्वरूप सभी Member Functions को Method ही कहा जाता है।

साथ ही C/C++ की तरह C# के Methods Default रूप से कोई मान Return नहीं करते। इसलिए यदि कोई Method कोई Value Return न कर रहा हो, तो Method का Return Type void Specify करना जरूरी होता है।

उदाहरण के लिए यदि हम हमारे Watch Class के Operations को Method की तरह Define करना चाहें, तो हमारी Watch Class के विभिन्न Methods निम्नानुसार हो सकते हैं:

class Watch
{
	//Fields
	byte hour = 12;		//Initialized with 12 – Value Type
	byte minute = 0;		//Initialized with 0 – Value Type

	//Methods
	void setTime(byte h, byte m);
	void displayTime();
}

Class Instance or Object Creation

चूंकि Class Type Definition वास्तव में केवल एक Blueprint या Model होता है, इसलिए Class Definition Memory में तब तक कोई Space Reserve नहीं करताए जब तक कि हम उसका Object या Instance Create नहीं करते।

इसलिए जब पिछले Section के आधार पर एक Class को Define या Declare कर लिया जाता है, तो फिर हम उस Class Type के आधार पर Class Type का Object या Instance Create कर सकते हैं, जो कि Memory में Actual Space Reserve करता है।

Classes हमेंशा Reference Type होते हैं, इसलिए Class Type के Objects भी Stack व Heap Area दोनों Memory Locations पर Space Reserve करते हैं, जहां Heap Area में Object का Actual Data Store होता है, जबकि Stack में उस Actual Data के Heap Area का Reference Store होता है।

चूंकि हमारे Object के Data हमारे Class Type के आधार पर Heap Area Memory में Space Reserve करते हैं, जिसे Stack का Variable Reference करता है, इसलिए सबसे पहले हमें Stack का Reference Variable ही Create करना होता है, जो कि Class Type का Variable होता है और ये Variable ही Heap Area के Actual Data को तब Reference करता है, जब हम Class Type के Object को Initial Values से Initialize करते हैं।

लेकिन जब तक हम Reference Variable को Initialize नहीं करते, तब तक उसमें null Stored रहता है, जो इस बात का Indication होता है कि Class Type का Reference Variable अभी तक किसी Actual Object को Refer नहीं कर रहा है। Class Type के Reference Variable को निम्नानुसार Declare किया जाता है:

        Watch hmt;

ये Statement Memory के Stack Area में Watch Type का hmt नाम का एक Reference Variable Create करता है, जिसमें Default रूप से null Stored होता है, क्योंकि हमने अभी तक इसे किसी Actual Watch Object का Reference Specify नहीं किया है। यानी अभी तक Heap Area में Watch Type का कोई Memory Allocate नहीं हुआ है।

Stack Area में Class Type का Reference Variable Create कर लेने के बाद हमें Object के Actual Data को Hold करने के लिए Heap Area में Memory Allocate करना होता है और इस जरूरत को पूरा करने के लिए हम Class Type के Constructor के साथ new Operator का प्रयोग करते हैं। क्योंकि Constructor ही Compiler को इस बात का Instruction देता है कि उसे किस Type के Data को Store करने के लिए Memory Allocate करना है।

इसलिए यदि हम हमारे Watch Type के Object के लिए Heap Area में Memory Allocate करना चाहें, तो हमें निम्नानुसार Statement Use करना होगा:

Watch hmt;
hmt = new Watch();

जब ये दोनों Statements Execute होते हैं, तो निम्न चित्रानुसार Watch Type के Actual Data को Store करने के लिए Heap Area में Memory Allocate होता है और उस Allocated Memory का Address Stack में Exist Reference Variable में Store हो जाता है:

What is Class in C# - Hindi

यदि हम चाहें तो उपरोक्त दो Line के Codes को हम निम्नानुसार एक ही Line के रूप में भी लिख सकते हैं:

        Watch hmt = new Watch();

ये Single Statement भी Watch Type का hmt नाम का एक Stack Reference Variable Cerate करेगा और उस Variable को एक Newly Allocated Memory Area के Reference से Initialize कर देगा, जबकि Create होने वाले Watch Type के Heap Area के सभी Fields अपने Default मान से Set भी हो जाएेंगे।

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW GET DEMO REVIEWS