C# Access Modifiers: जैसाकि हम जानते हैं कि C# का हर Program एक EXE या DLL Assembly के रूप में Define होता है, जबकि एक Program में एक से ज्यादा Classes या Types की Definition Exist हो सकती है।
इसलिए सामान्यत: Types के साथ Access Modifiers Specify करके हम इस बात को निश्चित करते हैं कि कौनसा Type किसी अन्य Type को किस Level तक और किस तरह से Access कर सकता है।
किसी भी Class को मूल रूप से internal या public Access Specifiers के साथ Define किया जा सकता है। जबकि यदि हम किसी Access Modifier का प्रयोग नहीं करते हैं, तो Create होने वाली सभी Classes Default रूप से Internal Access Mode में होती हैं।
जब हम किसी Class को public Keyword के साथ Define करते हैं, तो उस Class के Code को कोई भी अन्य Assembly Use कर सकता है। लेकिन जब हम internal Keyword के साथ अथवा बिना कोई Access Modifier Use किए हुए किसी Class को Define करते हैं, तो उस Class को केवल Current Assembly की अन्य Classes ही Use करने में सक्षम होती हैं, जबकि अन्य Assemblies की Classes इस Internal Class को Access नहीं कर सकतीं।
अभी तक हमने जितनी भी Classes Create की हैं, वे केवल Current Assembly में ही Inherit हो सकती हैं। लेकिन C# हमें ये सुविधा देता है कि हम किसी अन्य Assembly की Class को भी Inherit कर सकते हैं।
जब हम किसी अन्य Assembly की Class को Derive करना चाहते हैं, तब ये जरूरी होता है कि अन्य Assembly में Defined Class को public Access Modifier के साथ Define किया गया हो, ताकि उसे किसी External Assembly द्वारा Access किया जा सके।
साथ ही हमें Derived Class को Compile करते समय उस External Assembly का Reference भी Specify करना जरूरी होता है, ताकि C# Compiler समझ सके कि हम जिस Class को Derive कर रहे हैं, वह किस Assembly में Exist है।
जबकि यदि हम हमारे Application Development के लिए Visual Studio IDE को Use करते हैं, तो Visual Studio में References Section के अन्तर्गत हमें उस Assembly को Reference करना होता है, जिसकी Class को हम Inherit कर रहे हैं।
जब हम किसी External Assembly की किसी Class को अपने Program में Use करते हैं, तो हमें हमारे Program में बार-बार उस Assembly की Class का Fully Qualified Name Use करना होता है। इस परेशानी से बचने के लिए हम using Keyword का प्रयोग करके बार-बार Fully Qualified Name Specify करने से बच सकते हैं।
उदाहरण के लिए यदि हम हमारे सभी पिछले Programs को देखें, तो हमने हमारे हर Program में using System; Statement का प्रयोग करके System Namespace का Reference Set कर दिया है। इसीलिए हम हमारे सभी Programs में Console.WriteLine() Method को Directly Use कर सके हैं। जबकि यदि हम ऐसा नहीं करते, तो हमें हर बार System.Console.WriteLine() Statement Use करना पडता।
जब हम using Directive का प्रयोग करके किसी External Assembly को Reference करते हैं, तो हम Compiler को ये Instruction देते हैं कि हम जिस Type को Use कर रहे हैं, उसे कहां Define किया गया है। साथ ही हम बार-बार Fully Qualified Name लिखने से भी बच जाते हैं।
Member Access Modifiers in C#
हालांकि जब हम Class के साथ Access Modifiers का प्रयोग करते हैं, तब हम केवल public या internal Access Modifiers का ही प्रयोग कर सकते हैं। लेकिन जब हम Class के Members की बात करते हैं, तब हम विभिन्न Members के साथ विभिन्न Access Modifiers का प्रयोग करते हुए विभिन्न प्रकार की Requirements को पूरा कर सकते हैं।
किसी Class के विभिन्न Members के साथ जब कोई Access Specifiers Use नहीं किया जाताए तो उस स्थिति में Class के सभी Members एक-दूसरे के लिए तो Internally Directly Accessible होते हैं, लेकिन किसी External Class के लिए ऐसे Members Private यानी Inaccessible होते हैं।
जबकि यदि हम किसी Class के Members के साथ public Keyword का प्रयोग करें, तो उन Members को Class के सभी Members तो Internally Directly Access कर ही सकते हैं, साथ ही External Class या External World भी उन Public Members को Directly Access करने में सक्षम हो जाते हैं।
लेकिन जब हम किसी Class को Inherit करते हैं, तब Base Class के कौनसे Members Derived Class के लिए Accessible हैं और कौनसे नहीं, ये बात Base Class में Defined Members के साथ Specify किए गए Access Modifiers पर निर्भर करती है।
किसी भी Class का Default Access Mode Private होता है, इसलिए यदि हम Class में किसी Member के साथ कोई Access Specifiers Use नहीं करते, तो वह Member Implicitly Private Access Mode में ही होता है। साथ ही हमें Class के हर Member को अलग-अलग Access Specify करना भी जरूरी होता है। यानी C++ की तरह हम C# Members के Group को किसी भी Access Mode के लिए Define नहीं कर सकते।
Class का कोई भी Member उसकी Class के Access Level से ज्यादा Accessible नहीं हो सकता। यानी यदि कोई Class Default Access Mode में हो, तो उस Class में Define किया गया public Member भी Current Assembly के अलावा किसी अन्य Assembly में Directly Accessible नहीं हो सकताए क्योंकि उसकी Class ही केवल Current Assembly में ही Accessible है।
जब हम किसी Class को किसी Base Class से Derive करते हैं, तो इन बातों पर निर्भर करते हुए कि Base Class के विभिन्न Members किस Access Mode में हैं और Class किस Access Mode में है, Derived Class के Members की Accessibility तय होती है।
Public Member Accessibility
जब किसी Class को public Access Modifier के साथ Define किया जाता है, तो उस Class के public Access वाले Members समान Assembly व External Assembly में समान रूप से Directly Accessible होते हैं। इसलिए इस प्रकार की Class को किसी भी Assembly में बिना किसी Restriction के Inherit किया जा सकता है।
Private Member Accessibility
जब किसी Class को private Access Modifier के साथ Define किया जाता है, तो उस Class के private Access वाले Members न तो समान Assembly की Derived Class में न ही External Assembly की Derived Class में Directly Accessible होते हैं। यानी ऐसे Members किसी भी Derived Class में Directly Accessible नहीं होते, बल्कि हमेंशा किसी न किसी Public Method के माध्यम से Accessible होते हैं।
Protected Member Accessibility
जब किसी Class को protected Access Modifier के साथ Define किया जाता है, तो उस Class के protected Access वाले Members समान Assembly व External Assembly में Derived Classes में तो Directly Accessible होते हैं, लेकिन Derived Class के बाहर के लिए ये Members, Private Members की तरह व्यवहार करते है।
सामान्यत: किसी Class में Define किए गए सभी Member Methods की जरूरत External Classes को नहीं होती है। बल्कि कई बार हम ऐसे Methods Define करते हैं, जिनकी जरूरत केवल Derived Class को ही होती है। इस प्रकार के Methods को protected Access Modifier का प्रयोग करके Define किया जाता है।
क्योंकि Protected Methods Derived Class में तो Public Members की तरह ही Accessible होते हैं, लेकिन Class से बाहर अन्य External Classes के लिए ये Methods पूरी तरह से Private यानी Inaccessible होते हैं।
Internal Member Accessibility
जब किसी Class को public Access Modifier के साथ Define किया जाता है, तो उस Class के internal Access वाले Members समान Assembly में Derived Classes के लिए तो Directly Accessible रहते हैं, लेकिन External Assembly के लिए पूरी तरह से Restricted रहते हैं।
Protected Internal Member Accessibility
जब किसी Class को public Access Modifier के साथ Define किया जाता है, तो उस Class के protected internal Access वाले Members समान Assembly में Derived Classes के लिए Directly Accessible होते हैं, लेकिन External Assembly के लिए पूरी तरह से Restricted होते हैं।
इन सभी प्रकार की Member Visibility को हम निम्न सारणी द्वारा आसानी से याद रख सकते हैं:
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF