Static Methods in C#: पिछले Chapter तक हमने विभिन्न Fundamental Programming Concepts जैसे कि Data, Data Types, Control Statements, Looping आदि के बारे में Discuss किया, जो कि किसी भी Programming Language के मूलभूत Concepts होते हैं और लगभग सभी Programming Language में कुछ Special Concepts को छोडकर लगभग एक समान ही होते हैं। इस Chapter में हम उससे आगे के Concepts को Discuss करेंगे, जो कि केवल उसी स्थिति में ठीक से समझे जा सकते हैं, जबकि पिछले Chapter तक के सभी Fundamental Core Concepts को ठीक से समझा गया हो।
Method
C# में हम जब भी कोई Main Executable Program Create करते हैं, तो वास्तव में हम एक Class Type Create कर रहे होते हैं और Class Type के हमेंशा दो हिस्से होते हैं, जिसे Data Members व Methods के नाम से जाना जाता है। जबकि C# में Class Construct वास्तव में किसी Real World Object को Computer में Logically Represent करने के लिए Define किया जाता है।
इसलिए Class के Data Members किसी Real World Object के वे Data होते हैं, जिन्हें Manage करना होता है, जबकि Methods वे Operations होते हैं, जिन्हें Data Members पर Apply किया जाता है।
चूंकि Class Construct, Object Oriented Programming System का वह मुख्य आधार है, जो किसी Real World Object को Computer में Exactly उसी तरह से Logically Represent की करने की सुविधा Provide करता है, जिस तरह से वह Object Real World में Practically Represent होता है।
इसलिए C# पूरी तरह से Class Concept पर ही आधारित है, जो किसी Real World Object को Computer में एक User Define Type की तरह Represent करने की सुविधा Provide करता है और Method, इस Class Concept यानी User Defined Type का Operational Part होता है, जो कि Real World Object के Logical Behavior को Represent करता है।
C/C++ Programming Language का Function ही C# में Method कहलाता है। Method व Function में केवल इतना ही अन्तर है कि Method हमेंशा Class Type के अन्दर Define किया जाता है और Class के Object के अथवा Class के नाम के साथ Dot Operator का प्रयोग करते हुए Use किया जाता है, जबकि Functions हमेंशा Class के बाहर Define किए जाते हैं। चूंकि C# में कोई भी Code Class के बाहर नहीं लिखा जाताए इसलिए C# में भी Java की तरह Individual Functions नहीं होते।
C# में भी C/C++ व Java की तरह निम्नानुसार चार प्रकार के Methods हो सकते हैं:
- No Argument No Return Value Method
- Argument but No Return Value Method
- Argument and Return Value Method
- No Argument but Return Value Method
Method Basics
C# Method वास्तव में C# Code Statements का एक Block होता है और इस Code Statement Block को हम जहां चाहें वहां Method का नाम Specify करके Execute कर सकते हैं। यानी Method वास्तव में एक Named Code Block होता है, जिसमें बार-बार Execute होने वाले Codes को एक Block के रूप में Define कर दिया जाता है और जहां पर भी उन सारे Codes को Execute करना होता है, वहां हम Method के नाम को Parenthesis के साथ Specify कर देते हैं।
जबकि यदि Method में Parameters Pass करने होते हैं, तो उन Parameters को भी इस Parenthesis के बीच ही एक Comma Separated List के रूप में Specify किया जाता है। C# में किसी भी Method को Define करने का Syntax निम्नानुसार होता है:
ReturnDataType FunctionName ( ParameterList ){
local Variables;
// Executable Statement
return (Expression );
}
ReturnDataType
यहां हमें ये Declare करना होता है कि Method, Call करने वाले Method को जो मान Return करेगा, वह मान किस प्रकार के Data Type का होगा।
FunctionName
यहां हम अपने Method का नाम लिखते हैं और नाम देने में उन सभी नियमों का पालन करना पडता है, जिन नियमों का पालन हम किसी Variable Name Define करते समय करते हैं।
ArgumentList
जब हमें कोई मान किसी Method में भेज कर उस पर कोई प्रक्रिया करवानी होती है, तब हम वे मान Method के Parenthesis के बीच Specify कर देते हैं। ये मान Method के Parenthesis में Declare किए गए Variables/Objects में चले जाते हैं। ये Variables/Objects Argument List कहलाते हैं और जो मान Method को किसी अन्य Method से प्राप्त होते हैं, वे मान Argument Value कहलाते हैं।
उदाहरण के लिए यदि हमें दो Integer संख्याओं को जोडने के लिए एक Method Create करना हो, जो कि Argument के रूप में आने वाली दो संख्याओं को आपस में जोडकर Result को Calling Method को Return करता हो, तो हमारा Method कुछ निम्नानुसार होता है:
int addition(int x, int y){
return x + y;
}
हमारे इस Method का नाम addition है, जो कि दो Integer Type के Arguments Accept करता है और दोनों का जोड करके Result को एक Integer Value के रूप में Return करता है।
Static Method
चूंकि C# में हम जो भी Method Create करते हैं, उसे किसी न किसी Class या Structure की Body के बीच Create करते हैं, इसलिए जब तक हम उस Class/Structure का Object Create नहीं करते, तब तक हम हमारे Newly Created Method को Use नहीं कर सकते।
साथ ही यदि हम हमारे बना, किसी Method को Main() Method में Directly Access करने की कोशिश करते हैं, तो Main() Method एक Static Method होने की वजह से किसी Non-Static Method को Access करने की कोशिश करने पर Error Generate करता है। Main() Method के इस व्यवहार को हम निम्न Program द्वारा बेहतर तरीके से समझ सकते हैं:
// File Name: AdditionMethodWithinMainClass.cs using System; namespace CSharpIntermediateConstructsMethod { class AdditionMethodWithinMainClass { private static void Main(string[] args) { int value1, value2, total; Console.Write("Enter first value: "); value1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter second value: "); value2 = Convert.ToInt32(Console.ReadLine()); total = addition(value1, value2); Console.WriteLine("Total of {0} and {1} is {2}", value1, value2, total); } int addition(int x, int y) { return x + y; } } } // Output: AdditionMethodWithinMainClass.cs(16,12): error CS0120: An object reference is required for the non-static field, method, or property 'CSharpFundamentals.AdditionMethodWithinMainClass.addition(int, int)' AdditionMethodWithinMainClass.cs(21,7): (Location of symbol related to previous error)
जैसाकि हम इस Program के Output में दिखाई देने वाले Error से समझ सकते हैं, कि हम किसी Non-Static Method को बिना Object Reference Create किए हुए Directly Main() Method में Use नहीं कर सकते।
इसलिए यदि हम हमारे addition() Method को Normal तरीके से Run करवाना चाहते हैं, तो हमें हमारे addition() Method को भी एक Static Method बनाना होगा क्योंकि C# के Object Oriented Programming System Concepts के अनुसार एक Static Method ही किसी दूसरे Static Method को Directly Call कर सकता है।
अत: यदि हम हमारे पिछले Program को Normal तरीके से Run करवाना चाहते हैं, तो हमें हमारे addition() Method को एक Static Method बनाना होगा और किसी Normal Method को Static Method बनाने के लिए हमें हमारे Method के Return Type से पहले static Keyword का प्रयोग करना होता है। यानी हमें हमारे पिछले Program को निम्नानुसार Modify करना होगा, तभी वह Normal तरीके से Run होगा:
// File Name: StaticAdditionMethodWithinMainClass.cs using System; namespace CSharpIntermediateConstructsMethod { class StaticAdditionMethodWithinMainClass { private static void Main(string[] args) { int value1, value2, total; Console.Write("Enter first value: "); value1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter second value: "); value2 = Convert.ToInt32(Console.ReadLine()); total = addition(value1, value2); Console.WriteLine("Total of {0} and {1} is {2}", value1, value2, total); } static int addition(int x, int y) { return x + y; } } } // Output: Enter first value: 10 Enter second value: 20 Total of 10 and 20 is 30
लेकिन यदि हम किसी Non-Static Method को किसी Main Class के अलावा अन्य किसी Non-Static Class के अन्दर Define करते हैं, तो उस Non-Static Class के सभी अन्य Non-Static Method, उस Non-Static Method को बिना Object Create किए हुए Directly Access कर सकते हैं।
यानी Non-Static Method केवल किसी अन्य Non-Static Method को ही Directly Access कर सकता है, जबकि Static Method उसी स्थिति में किसी Non-Static Method को Access सकता है, जबकि वह किसी Object Reference के साथ Specify किया गया हो। लेकिन Non-Static Method कभी भी किसी Static Method को Directly Access नहीं कर सकता।
चूंकि हम C# में बिना Class Construct का प्रयोग किए हुए कोई भी Running Program Create नहीं कर सकते और हर Class Construct एक प्रकार का नया User Define Type होता है, इसलिए भले ही हमारा Class एक Main Class Construct ही क्यों न हो, जिसमें Main() Method Define किया गया हो, हम Main() Method में भी Main Class का Object या Instance Create कर सकते हैं और उस Object के साथ Dot Operator का प्रयोग करके Main Class में Define किए गए अन्य Non-Static Methods को Access कर सकते हैं। इस पूरी प्रक्रिया को हम निम्नानुसार एक Program द्वारा बेहतर तरीके से समझ सकते हैं:
// File Name: ObjectOfMainClassInMainClass.cs using System; namespace CSharpIntermediateConstructsMethod { class ObjectOfMainClassInMainClass { private static void Main(string[] args) { int value1, value2, total; Console.Write("Enter first value: "); value1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter second value: "); value2 = Convert.ToInt32(Console.ReadLine()); ObjectOfMainClassInMainClass myObj = new ObjectOfMainClassInMainClass(); total = myObj.addition(value1, value2); Console.WriteLine("Total of {0} and {1} is {2}", value1, value2, total); } int addition(int x, int y) { return x + y; } } } // Output: Enter first value: 10 Enter second value: 20 Total of 10 and 20 is 30
जैसाकि हम देख सकते हैं कि इस Program का Output Exactly वही है, जो पिछले Program का था।
इस Program में Create किया गया addition() नाम का Method एक Non-Static Method है। साथ ही इसी Class में हमने Main() Method को भी Define किया है, जिसकी वजह से Current Class ही हमारी Main Class भी है।
चूंकि Static Main() Method द्वारा किसी Non-Static Method को Directly Access नहीं किया जा सकताए इसलिए इस Program में addition() नाम के Method को उसी स्थिति में Main() Method में Use किया जा सकता है, जबकि addition() Method जिस Class में Exist है, उस Class का एक Object Create किया जाए। इसीलिए हमने निम्न Statement द्वारा myObj नाम का एक Object Create किया है:
ObjectOfMainClassInMainClass myObj = new ObjectOfMainClassInMainClass();
चूंकि हमने Static Main() Method में Non-Static addition() Method की Class का myObj नाम का एक Object Create कर लिया है, इसलिए इस addition() Method को myObj Object के साथ Dot Operator का प्रयोग करते हुए Static Main() Method में Call कर सकते हैं और इस काम को हमने निम्न Statement द्वारा Perform किया है:
total = myObj.addition(value1, value2);
हालांकि हमने एक ही जरूरत को पूरा करने के लिए दो तरीकों को Use किया है। लेकिन फिर भी Static Methods का प्रयोग सामान्यत: तब किया जाता है, जब हमें ऐसे Methods Create करने होते हैं, जो कि काफी General तरीके से Use किए जाने होते हैं। जबकि Non-Static Method तब Define किए जाते हैं, जब उन Methods को केवल Current Class के Data को ही Access व Manipulate करना होता है।
Local Variables V/s Field Variable
किसी Method के अन्दर जो भी Variable Declare किया जाता है, Local Variable कहलाता है, क्योंकि ये Variables केवल Method के Scope में ही Exist रहते हैं और Program Control जैसे ही Method को Execute करके अपने Calling Method के Scope में Return होता है, उसके सभी Local Variables Destroy हो जाते हैं।
इसी तरह से किसी Class के Scope में Create किए गए Data Members को Field कहा जाता है और ये Field केवल Current Class के Scope में Exist रहते हैं, जिन्हें Current Class में Define किए गए सभी Methods तो Directly Access कर सकते हैं, लेकिन किसी दूसरे Class के Objects इन्हें Directly Access नहीं कर सकते।
Fields व Local Variables का Scope व Life Time अलग-अलग होता है। Class के Fields, Object Create करने से लेकर Object के Destroy होने तक Accessible रहते हैं, जबकि Local Variables, Block के Opening Curly Brace से Closing Curly Brace तक ही Accessible रहते हैं।
इसी तरह से Fields हमेंशा Object के Create होते ही Default Value से Initialize हो जाते हैं। जबकि Local Variable में यदि कोई मान Initialize या Assign किए बिना इन्हें Use किया जाता है, तो Compiler Error Generate करता है।
Fields हमेंशा किसी Class के Instance के Data Members होते है, जो कि एक Reference Type होता हैं। इसलिए Fields हमेंशा Memory के Heap Area में Store होते हैं। जबकि सभी Value Type Local Variables हमेंशा Stack में Store होते हैं, तथा सभी Reference Types के Local Objects हमेंशा Heap Area में Store होने के बावजूद उनका Reference Stack में Store होता है।
इस तरह से Local Variables व Class के Data Members यानी Fields दोनों के Scope व Lifetime अथवा Scope and Accessibility में काफी अन्तर होता है।
C/C++ Programming Language की तरह ही हम C# में भी Blocks की Nesting कर सकते हैं। लेकिन C# में किसी भी Level की Nesting ही क्यों न हो, हम एक Program में एक नाम का केवल एक ही Variable Create कर सकते हैं। जबकि C/C++ Programming Languages में हम अलग-अलग Block में समान नाम के Variable Create कर सकते थे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF