ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग वी. बी. डॉट नेट पार्ट-2 | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के फायदे | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की विशेषताएं | Object Oriented Programming In Hindi
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग वी. बी. डॉट नेट परिचय (Introduction) – वी०वी० डॉट नेट के बारे में यह कहा जाता है कि यह सम्पूर्ण ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है। ऐसा दावा शत प्रतिशत प्रदत्त प्रोग्रामिंग के सभी कसौटी पर वी. बी. डॉट नेट खड़ा उतरता है। इस अध्याय में हम आपको इसके ऑब्जेक्ट ओरिएंटेड सही है। वी. बी. डॉट नेट में वह सारी चीजें हैं, जो एक ऑब्जेक्ट ओरिएंटेड भाषा में होनी चाहिए। बल्कि मैं यह कहूँ कि ऑब्जेक्ट प्रोग्रामिंग भाषा होने से संबंधित बातें बताने जा रहा हूँ।
इस पार्ट-2 में हम जानेगे :- पॉलिमॉर्फिज्म तथा ओवरलोडिंग (Polymorphism and Overloading), पॉलिमॉर्फिज्म तथा ओवरराइडिंग (Polymorphism and Overriding), एक्सेस स्पेसिफायर (Access Specifiers), प्रॉपर्टी (Properties)
पॉलिमॉर्फिज्म तथा ओवरलोडिंग (Polymorphism and Overloading)
ओवरलोडिंग वी. बी. डॉट नेट का एक बहुत ही बढ़िया फीचर है जिसकी वी. बी. 6.0 में कमी थी। इसकी सहायता से आप एक ही मेथड के कई संस्करण बना सकते हैं। मेथड के नाम तो एक ही होते हैं परन्तु उसके आर्ग्यूमेण्ट सूची (argument list) अलग अलग होते हैं।
प्रत्येक मेथड का एक पहचान होता है जिसका उपयोग कम्पाइलर आंतरिक रूप से करता है। मेथड के आर्ग्यूमेण्ट्स को बदलने पर इसका पहचान भी बदल जाता है। इसके कारण वी. बी. डॉट नेट की सहायता से आप मेथड को ओवरलोड कर सकते हैं। इसका अर्थ यह है कि आप मेथड के विभिन्न संस्करण रख सकते हैं तथा सभी के नाम एक ही होंगे। अर्थात् जब आप मेथड को आवरलोड करते हैं तब मेथड की वास्तविक पहचान उसकी आर्ग्यूमेण्ट लिस्ट होती है। ओवरलोडिंग बिल्कुल आसान है।
1- ओवरलोडेड मेथड बनाना (Creating An Overloaded Method) – आप वी. बी. डॉट नेट में ओवरलोडेड मेथड को दो तरीके से बना सकते हैं।
पहला एक ही क्लास के अंदर दो या अधिक मेथड बनाएँ जिसके अलग अलग आर्ग्युमेण्ट लिस्ट होंगे। उदाहरण के लिए-
Public Function GetPersonInfo(ByVal v sFirstName As String)
End Function
Public Function GetPersonInfo(ByVal v_1Personld As Long)
End Funciton
दूसरा Overloads की-वर्ड का उपयोग करके ओवरलोडेड मेथड बना सकते हैं। उदाहरण के लिए-
Public Overloads Function GetPersonInfo(ByVal v sFirstName As string)
End Function
Public Overloads Function GetPersonInfo(ByVal v_1Personld As Long)
End Function
उपरोक्त कोड में Overloads की-वर्ड वैकल्पिक होता है। यदि आप इसे उपयोग करते हैं तो आपको इसके नियम का अनुसरण करना होगा। फंक्शन ओवरलोडिंग के कई नियम हैं जिनका पालन वी. बी. प्रोग्रामर द्वारा किया जाना आवश्यक है।
2- ओवरलोडिंग के नियम (Rules For Overloading) – ओवरलोडिंग के कई नियम है जिनका पालन वी. बी. प्रोग्रामर द्वारा किया जाना अच्छा समझा जाता है। ये नियम इस प्रकार
- आर्ग्यूमेण्ट सूची अलग होना चाहिए (Arguments List Must be Different) – ओवरलोडेड मेथड में आर्ग्युमेण्ट सूची अलग होना चाहिए। आप ऐसे दो मेथड नहीं रख सकते हैं जिसमें प्रत्येक का आर्ग्युमेण्ट समान डाटा टाइप का हो लेकिन आर्ग्युमेण्ट अलग नाम का हो। ऐसा करने पर कम्पाइलर यह त्रुटि संदेश देगा-
Method [methodname] has multiple definitions with identical signatures
यदि आर्ग्यमेण्ट्स समान है। जैसेकि इस प्रकार तब भी वी. बी. डॉट नेट एक ही क्लास के अंदर निम्नलिखित की अनुमति नहीं देगा-
Public Overloads Function GetPersonInfo(ByVal v_sFirstName As String)
……………
End Function
Public Overloads Function GetPersonInfo(ByVal v_sLastName As String)
……………
End Function
किन्तु निम्नलिखित कोड स्वीकार्य होगा क्योंकि आर्ग्युमेण्ट सूची अलग है-
Public Overloads Function GetPersonInfo(ByVal v_sFirstName As String)
EndFunction
Public Overloads Function GetPerfonInfo (ByVal v_sLastName As String, ByVal v_sFirstName As String)
End Finction
- आप ओवरलोडेड मेथड के मध्य केवल Optional आर्ग्युमेण्ट के साथ अंतर नहीं कर सकते हैं। ओवरलोडेड मेथड केवल एक Optional आर्ग्यूमेण्ट के द्वारा अलग नहीं हो सकता है। उदाहरण के लिए निम्नलिखित कोड मान्य नहीं है –
Public Overloads Function GetPersonInfo(ByVal v sFirstName As String)
……………
End Function
Public Overloads Function GetPersonInfo(ByVal v FirstName AsString…
Optional By Val v LastName As String = “”)
End Function
- आप ओवरलोडेड पेड के मध्य केवल रिटर्न टाइपूस से अंतर नहीं कर सकते हैं। जैसे इस उदाहरण को देख
Public Overloads Function GetPersonInfo(ByVal v FirstName As String) As String
End Function
Public Overloads Function GetPersonInfo(ByVal v sFirstName As String) As Data Dataset
End Function - एक ही क्लास के अंदर एक ही मेथड के नाम के साथ सभी मेथडों में कीवर्ड जोड़ें। क्योंकि Overloads कीवर्स वैकल्पिक है आप यदि एक ही क्लास के एक मेथड नाम के साथ इस की वर्ड को जोड़ने के बाद सभी मेथड़ों में इसे जोड़ना आवश्यक होगा। उदाहरण के लिए यह देखें-
Public Class Person
Public Overloads Function GetPersonInfo (ByVal v_sFirstName As String)
……………
End Function
Public Overloads Function GetPersonInfo (By Val v_1PersonId As Long )
……………
End Function
End Class
किन्तु आप अलग क्लास में एक ही मेथड का नाम उपयोग कर सकते हैं तथा Overloads की-वर्ड को छोड़ सकते हैं। आपको ऐसा करने की अनुमति का कारण यह है कि अलग क्लास के मेथड की अलग पहचान (signature) होती है। यदि आप एक ही क्लास में एक ही मेथड नाम के साथ एक में Overloads की-वर्ड का उपयोग करते हैं दूसरे में छोड़ देते हैं कम्पाइलर यह त्रुटि देगा-
तथा Function (or sub) ( methodname] must be declared ‘Overloads’ because another [methodname] is de. clared ‘Overloads’.
3- ओवरलोडिंग के लाभ (Advantages of Overloading)
ओवरलोडिंग वी. बी. डॉट की और से वी. बी. प्रोग्रामर को एक बढ़िया सौगात है। स्पष्ट है इसके कई बड़े फायदे होंगे। आइए हम इसके निम्नलिखित लाभ जानते हैं-
- मेथड ओवरलोडिंग मेथड मैप को एक स्टैण्डर्ड इंटरफेस देता है। अगर कोई व्यक्ति मेथड को कॉल कर रहा होता है तो उसे इसकी स्पष्ट समझ होती है कि मेथड क्या करेगा तथा इसके लिए कौन से आर्ग्यूमेण्ट्स आवश्यक होंगे।
- ओवरलोडेड मेथड अन्य भाषाओं (यथा सी शार्प, सी++ तथा जावा) के साथ बेहतर कार्य करते हैं जो मेथड को कॉल करने के लिए वैकल्पिक (optional) पैरामीटर का उपयोग नहीं करते हैं।
- कोड स्पष्ट होता है। आपको अब अपने कोड को उलझाकर यह समझने की आवश्यकता नहीं कि आर्ग्यूमेण्ट के आधार पर किस लॉजिक का उपयोग करें।
- कम्पाइलर कम्पाइल समय में अमान्य आर्ग्युमेण्ट को पहचान लेगा जो रनटाइम में आर्ग्यूमेण्ट से संबंधित त्रुटियों को कम करने में सहायक होता है।
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा क्या है इसकी विभिन्न विशेषताएं | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग वी. बी. डॉट नेट | Object Oriented Programming System क्या होता है? | What Is Object-Oriented Programming Hindi?
पॉलिमॉफिज्म तथा ओवरराइडिंग (Polymorphism and Overriding)
किसी क्लास के प्रॉपर्टी, मेथड तथा टेक्स्ट का सेट क्लास इंटरफेस कहा जाता है। सारांशत: क्लास का इंटरफेस यह परिभाषित करता है कि इसे किस प्रकार आचरण करना चाहिए। Simple तथा Scientific क्लास का इंटरफेस जो उपयोग किया गया है।
Simple | Scientific | |
प्रॉपर्टी | FirstNumber | ArstNumber |
SecondNumber | SecondNumber | |
मेथड | Add | Add |
Subtract | Subtract | |
Multiply | Multiply | |
Divide | Divide | |
इवेण्ट | कोई नहीं | कोई नहीं |
Student तथा PFstudent दोनों के एक ही इंटरफेस हैं यद्यपि वे सेमेस्टर ग्रेड को अलग ढंग से सम्पन्न करते हैं। देखें तालिका
Student | PFstudent | |
प्रॉपर्टी | StudentIdentity Device | StudentIdentity Device |
Name | Name | |
Fundamentals | Fundamentals | |
Office | Office | |
C | C | |
SAD | SAD | |
मेथड | Grade | Grade |
इवेण्ट | कोई नहीं | कोई नहीं |
यदि प्रोग्रामर ऐसा प्रोग्राम लिखना चाहे जो इन दो क्लासों से ऑब्जेक्ट को मनिप्यूलेट करे तो उसे केवल यह जानना पड़ेगा कि इंटरफेस को उपयोग कैसे करें। प्रोग्रामर को यह जानने की आवश्यकता नहीं कि उस इंटरफेस का कौन सा विशेष कार्यान्वयन (iplementtation) उपयोग हो रहा है। (उदाहरण के लिए चौमिन खाने के लिए आप को केवल काँट को कैसे उपयोग करना है यह जानना आना चाहिए यह जानने की आवश्यकता नहीं कि चौमिन बना कैसे है।) ऑब्जेक्ट उसके बाद उस विशेष कार्यान्वयन के अनुसार ही कार्य करेगा।
प्रोग्रामर को केवल Grade मेथड की आवश्यकता होगी तथा इसके कार्यान्वयन के बारे में चिंतित होने की आवश्यकता नहीं होनी चाहिए। जैसा कि पहले भी जान चुके हैं कि वह फीचर जो क्लास में ऐसे मेथड रख सकते हैं जिनके नाम समान हों तथा उद्देश्य एक ही परन्तु उनके कार्यान्वयन अलग-अलग होते हैं पोलिमोर्फिजम कहा जाता है।
प्रोग्रामर पॉलिमोर्फिज़म को तीन अलग-अलग पदों में लागू कर सकते हैं। पहला प्रॉपर्टी, मेथड तथा इवेण्ट जो इंटरफेस बनाते हैं को परिभाषित करके। दूसरा पेरेण्ट क्लास का निर्माण करके जो इंटरफेस के द्वारा बताए गए फंक्शनलिटि को सम्पन्न कर दे।
ऑतिम चाइल्ड क्लास पेरेण्ट को इनहेरिट करे तथा उन मेथड को ओवरराइड करे जो पेरेण्ट में अलग कार्यान्वयन चाहते हैं। Overridable की-वर्ड का प्रयोग उन पेरेण्ट मेथड को असाइन करने में होते हैं, जो ओवरराइड किए जाते हैं तथा Overrides की-वर्ड का उपयोग उन चाइल्ड मेथडों को असाइन करने में होता है, जो ओवरराइडिंग कर रहे हैं।
इस दौरान ऐसी परिस्थितियाँ आती हैं जहाँ चाइल्ड क्लास को पेरेण्ट क्लास के मेथड कार्यान्वयन को एक करने की आवश्यकता पड़े जो चाइल्ड ओवरराइड कर रहा है। वी. बी. डॉट नेट इस फंक्शनलिटि को सपोर्ट करने के लिए MyBase की-वर्ड उपलब्ध कराता है।
पोलिमोर्फिज़म को कार्य में लगाने के लिए Overridable की-वर्ड को क्लास के Grade मेथड के डिक्लेअरेशन लाइन में डाला जाता है। इस प्रकार – Overridable Function Grade() As String
PFstudent क्लास अपने पेरेण्ट क्लास के सभी प्रॉपर्टी तथा मेथड को इनहेरिट करता है तथा Grade मेथड को ओवरराइड करता है। इसका कोड इस प्रकार होगा-
Class PFStudent
Inherits Student
Overrides Function Grade() As String
If My Base. Grade = “F” Then
Return “Fail”
Else
Return “Pass”
End If
End Function End Class
एक्सेस स्पेसिफायर (Access Specifiers)
एक्सेस स्पेसिफायर किसी ऑब्जेक्ट तथा इसके सदस्यों की एक्सेसिबिलिटी के स्कोप का वर्णन करता है। हम एक्सेस स्पेसिफायर का उपयोग कर क्लास के मेम्बर ऑब्जेक्ट के स्कोप को नियंत्रित कर सकते हैं। हम एक्सेस स्पेसिफायर का उपयोग अपने एप्लिकेशन के डाटा को सुरक्षित रखने के उद्देश्य से करते हैं।
विजुअल बेसिक पाँच एक्सेस स्पेसिफायर यथा Public, Private, Protected, Friend तथा Protected Friend उपलब्ध कराता है।
1- पब्लिक (Public) – Public स्पेसिफायर डॉट नेट का सबसे सामान्य एक्सेस स्पेसिफायर है। इसे कहीं से भी एक्सेस किया जा सकता है। अर्थात् इसकी एक्सेसिबिलिटी (accessibility) पर कोई प्रतिबंध नहीं होता है। डिक्लेअरेशन स्टेटमेण्ट में Public कीवर्ड यह स्पष्ट करता है कि ये अवयव प्रोजेक्ट के अंदर कहीं से भी या अन्य प्रोजेक्ट से जो उन अवयव वाले प्रोजेक्ट का रेफ्रेन्स देता हो तथा प्रोजेक्ट में बने असेम्बली में कहीं से एक्सेसिबल होता है। उदाहरण के लिए यह कोड- Public Class पब्लिक डिक्लेअरेशन को दर्शाता है।
आप Public का उपयोग मॉड्यूल, इंटरफेस या नेमस्पेस स्तर पर कर सकते हैं। इसका अर्थ यह है कि आप किसी पब्लिक अवयव को सोर्स फाइल या नेमस्पेस स्तर पर घोषित कर सकते हैं या इसे इंटरफेस, मॉड्यूल, क्लास या स्ट्रक्चर के भीतर घोषित किया जा सकता है परन्तु इसे किसी प्रॉसीजर के अंदर घोषित नहीं किया जा सकता है।
2- प्रोटेक्टेड (Protected) – Protected की-वर्ड डिक्लेअरेशन स्टेटमेण्ट में यह स्पष्ट करता है कि अवयव केवल उसी क्लास के अंदर या उस क्लास के व्युत्पन्न क्लास से ही केवल एक्सेसिबल होता है। यह कोड- Protected Class classForMyFamily Protected डिक्लेअरेशन को दिखाता है।
आप Protected का उपयोग केवल क्लास स्तर पर तथा उस क्लास के मेम्बर को डिक्लेअर करते समय कर सकते है। इसका अर्थ है कि आप क्लास में ही प्रोटेक्टेड अवयव को डिक्लेअर कर सकते हैं परन्तु इसे सोर्स फाइल या नेमस्पेस स्तर पर, इंटरफेस, मॉड्यूल, स्ट्रक्चर या प्रोसीजर के अंदर डिक्लेअर नहीं कर सकते हैं।
3– फ्रेण्ड (Friend) – Friend कीवर्ड का उपयोग डिक्लेअरेशन स्टेटमेण्ट में यह बताता है कि अवयव केवल समान असेम्बली के अंदर की
एक्सेसिबल है। इन्हें असेम्बली के बाहर से एक्सेस नहीं किया जा सकता है। यह कोड Friend StringForThisProject As String
Friend डिक्लेअरेशन को दिखाता है। आप Friend का उपयोग केवल मॉड्यूल, इंटरफेस या नेमस्पेस स्तर पर कर सकते हैं। इसका अर्थ है कि आप किसी फ्रेण्ड या किसी इंटरफेस, मॉड्यूल, क्लास या एलिमेण्ट को केवल सोर्स फाइल या नेमस्पेस स्तर पर डिक्लेअर कर सकते स्ट्रक्चर के अंदर डिक्लेअर कर सकते हैं। इसको प्रोसीजर के अंदर डिक्लेअर नहीं कर सकते हैं।
4- प्रॉटेक्टेड फ्रेण्ड (Protected Friend) – आप किसी डिक्लेअरेशन स्टेटमेण्ट में एक साथ Protected तथा Friend दोनों एक्सेस स्पेसिफायर का उपयोग कर सकते हैं। दोनों की-वर्ड का उपयोग यह बताता है कि ये अवयव या तो व्युत्पन्न क्लास से या फिर समान असेम्बली से एक्सेसिबल होते हैं। उदाहरण के लिए यह स्टेटमेण्ट- Protected Friend StringForProjectAndFamily As String प्रोटेक्टेड फ्रेण्ड के डिक्लेअरेशन को दर्शाता है।
आप Protected Friend का उपयोग क्लास स्तर पर कर सकते हैं या उस क्लास के सदस्य को डिक्लेअर करते समय कर सकते हैं। इसका अर्थ यह है कि आप प्रोटेक्टेड फ्रेण्ड अवयव को क्लास में डिक्लेअर कर सकते हैं परन्तु इसको सोर्स फाइल या नेमस्पेस स्तर पर, इंटरफेस, मॉड्यूल, स्ट्रक्चर या प्रोसीजर के अंदर डिक्लेअर नहीं किया जा सकता है।
5- प्राइवेट (Private)
डिक्लेअरेशन स्टेटमेण्ट में Private की-वर्ड स्पष्ट करता है कि अवयव केवल मॉड्यूल, क्लास या स्ट्रक्चर से एक्सेसिबल
हो। यह कोड Private डिक्लेअरेशन को दिखाता है- Private numberForMeOnly As Integer
आप Private का उपयोग केवल मॉड्यूल स्तर पर कर सकते हैं। इसका अर्थ यह है कि आप प्राइवेट अवयव को किसी मॉड्यूल, क्लास या स्ट्रक्चर के अंदर डिक्लेअर कर सकते हैं। इसे सोर्स फाइल या नेमस्पेस स्तर पर, इंटरफेस के अंदर या प्रोसीजर में डिक्लेअर नहीं किया जा सकता है।
मॉड्यूल स्तर पर Dim. स्टेटमेण्ट बगैर एक्सेस स्पेसिफायर के Private डिक्लेअरेशन के समान होता है। किन्तु आप Private की-वर्ड का उपयोग कर अपने कोड को पढ़ना तथा इंटरप्रेट करना आसान बना सकते हैं। नोट : एक्सेस स्तर को स्पष्ट करने वाले की-वर्ड एक्सेस मॉडिफायर कहे जाते हैं।
प्रॉपटी (Properties)
प्रॉपर्टी वी. बी. डॉट नेट कम्युनिटि में स्मार्ट फील्ड (smart fields) के नाम से जाने जाते हैं। हम जानते हैं कि डाटा एनकैप्सूलेशन वी. बी. डॉट नेट में प्रॉपर्टी कुछ नहीं केवल डाटा फील्ड्स का प्राकृतिक विस्तारण (natural extension) मात्र है। वे आमतौर डाटा एनकैप्सूलेशन क्लास अथवा स्ट्रक्चर के माध्यम से ही संभव हैं।
विभिन्न प्रकार के एक्सेस मॉडिफायर यथा प्राइवेट, तथा डाटा हाइडिंग (data hiding) ऑब्जेक्ट ओरिएण्टेड प्रोग्रामिंग भाषा के दो आधारभूत फीचर हैं। वी. बी. डॉट नेट में, पब्लिक, प्रोटेक्टेड इत्यादि का उपयोग कर क्लास सदस्यों की एक्सेसिबिलिटि को नियंत्रित करना संभव है।
आमतौर पर क्लास के अंदर हम डाटा फील्ड को प्राइवेट के रूप में डिक्लेअर करते हैं तथा पब्लिक SET तथा GET मेथड के एक सेट डाटा फील्ड को एक्सेस करने के लिए उपलब्ध कराता है। यह अच्छी प्रोग्रामिंग प्रचलन है चूँकि डाटा फील्ड क्लास के बाहर प्रत्यक्ष रूप से एक्सेसिबल नहीं होते हैं डाटा फील्ड को एक्सेस करने के लिए Set/get मेथड का उपयोग करना आवश्यक है। निम्नलिखित उदाहरण Set/get मेथड के उपयोग को दर्शाता है-
Imports System
Class [MyClass]
Private x As Integer
Public Sub SetX (By
Vali As Integer)
X = i
End Sub
Public Function GetX() As Integer
Return X
End Function
End Class [MyClass]
Class MyClient
Public Shared Sub Main()
Dim mc As New [MyClass]
mc.SetX (10)
Dim xVal As Integer = mc.GetX ()
Console. WriteLine (x Val) ‘ 10 डिस्प्ले करता है।
End Sub
End Class ‘MyClient
परन्तु वी. बी. डॉट नेट प्रॉपर्टीज नाम का एक एक पूर्व-निर्मित मैकेनिजम (mechanism) उपरोक्त को करने के लिए उपलब्ध कराता है। वी. बी. डॉट नेट में प्रॉपर्टीज को प्रॉपर्टी डिक्लेअरेशन प्रारूप का उपयोग कर परिभाषित किया जाता है। प्रॉपर्टी को डिक्लेअर करने का एक सामान्य प्रारूप इस प्रकार है-
<access_modifier> <return_type> <property_name>
Get
End Get
Set
End Set
जहाँ <access_modifier> प्राइवेट, पब्लिक, प्रोटेक्टेड या इंटरनल हो सकता है।
return_type कोई भी मान्य वी. बी. डॉट नेट टाइप हो सकता है।
उपरोक्त प्रारूप का पहला भाग फील्ड डिक्लेअरेशन के समान दिखता है तथा दूसरा भाग get एक्सेस तथा Set एक्सेस पर बना हुआ है।
उदाहरण के लिए उपरोक्त प्रोग्राम को प्रॉपर्टी x के साथ इस प्रकार संशोधित किया जा सकता है-
Class MyClass
Private X As Integer
Public Property X() As Integer
Get
Return X
End Get
Set (By Val Value As Integer)
X = Value
End Set
End Property
End Class MyClass
MyClass क्लास का ऑब्जेक्ट X प्रॉपर्टी को इस प्रकार एक्सेस कर सकता है-
Dim mc As New [MyClass]
mc.X = 10
X प्रॉपर्टी के Set एक्सेसर को कॉल करता है तथा स्टैण्डर्ड फील्ड का मान value को 10 पास करता है। इसका उपयोग डाटा सदस्य X के लिए मान सेट करने में होता है।
Console. WriteLine (mc.X)
10 को डिस्प्ले करता है तथा X प्रॉपर्टी के get एक्सेसर को कॉल करता है।
इसका संपूर्ण प्रोग्राम इस प्रकार होगा-
Imports System
Class MyClass
Private X As Integer
Public Property XO As Integer
Get
Return X
End Get
Set(ByVal Value As Integer)
X = Value
End Set
End Property
End Class ‘ [MyClass]
Class My Client
Public Shared Sub Main()
Dim mc As New MyClass()
mc.X = 10
Dim xVal As Integer = mc.X
Console. WriteLine (xVal) * 10 को डिस्प्ले करता है।
End Sub
End Class
याद रखें कि प्रॉपर्टी में कम से कम एक एक्सेसर Set अथवा get होना चाहिए। Set एक्सेसर में इसमें उपलब्ध Value नामक एक मुक्त वेरियेबल होता है जो कम्पाइलर द्वारा स्वतः बन जाता है। हम Set एक्सेसर के अंदर value नाम के साथ किसी वेरियेबल को डिक्लेअर नहीं कर सकते हैं।
1- स्टैटिक प्रॉपर्टी (Static Properties)
वी. बी. डॉट नेट स्टैटिक प्रॉपर्टी को सपोर्ट करता है जो क्लास के ऑब्जेक्ट से नही बल्कि क्लास से सम्बंधित होता है स्टैटिक मेम्बर पर लागू होने वाले सभी नियम स्टैटिक प्रॉपर्टी पर लागू होते हैं , निम्नलिखित प्रोग्राम क्लास के साथ स्टैटिक प्रॉपर्टी को दर्शाता है –
Imports System
Class MyClass
Private Shared X As Integer
Public Shared Property X() As Integer
Get
Return X
End Get
Set (ByVal Value As Integer)
X-Value
End Set
End Property
End Class
Class MyClient
Public Shared Sub Main()
MyClass.X = 10
Dim xVal As Integer = MyClass.X
Console.WriteLine(x Val) ‘ 10 को डिस्ले करता है।
End Sub ‘Main
End Class ‘MyClient
याद रखें कि स्टैटिक प्रॉपर्टी का Set/get एक्सेसर क्लास के केवल अन्य स्टैटिक सदस्यों को ही एक्सेस कर सकता है तथा स्टेटिक प्रॉपर्टी क्लास नाम का उपयोग कर इनवोक होते हैं।
2– प्रॉपर्टीज और इनहेरिटेन्स (Properties & Inheritance)
आधार (base) क्लास के प्रॉपर्टी को व्युत्पन्न क्लास में इनहेरिट किया जा सकता है। इसको समझने के लिए इस प्रोग्राम को देखें
Import System
Class base
Public Property X() As Integer
Get
Console.Write(“Base GET”)
Return 10
End Get
Set(ByVal Value As Integer)
Console.Write(“Base SET”)
End Set
End Property
End Class’ Base
Class Derived
Inherits Base
End Class’ Derived
Class MyClient
Public Shared Sub Main()
Dim dl As New Derived
d1.X = 10
Console.WriteLine(d1.X)
End Sub
End Class
उपरोक्त प्रोग्राम बिल्कुल सीधा है। प्रॉपर्टी का इनहेरिटेन्स किसी अन्य सदस्य के इनहेरिटेन्स के समान है।
3- प्रॉपर्टीज और पोलिमोर्फिस्म (Properties and Polymorphism) – आधार क्लास का प्रॉपर्टी व्युत्पन्न क्लास में एक नाम के कई रूपों में (polymorphically) ओवरराइड किया जा सकता है। परन्तु यह याद रखें कि virtual, override इत्यादि जैसे मॉडिफायर केवल प्रॉपर्टी स्तर पर उपयोग हो रहे होते हैं। ये एक्सेसर स्तर पर उपयोग हो रहे होते हैं। इस प्रोग्राम को देखें-
Imports System
Class Base
Public Overridable Property X() As Integer
Get
Console.Write (“Base GET”)
Return 10
End Get
Set (ByVal Value As Integer)
Console.Write(“Base SET”)
End Set
End Property
End Class’ Base
Class Derived
Inherits Base
Public Overrides Property X() As Integer
Get
Console.Write (“Derived GET”)
Return 10
End Get
Set (ByVal Value As Integer)
Console.Write(“Derived SET”)
End Set
End Property
End Class’ Derived
Class MyClient
Public Shared Sub Main()
Dim b1 = New Derived
b1.X = 10
Console.WriteLine(b1.X)
End Sub
End Class ‘MyClient
4- ऐब्स्ट्रैक्ट प्रॉपर्टीज (Abstract Properties) – क्लास के अंदर प्रॉपर्टी को Abstract की-वर्ड की सहायता से एब्स्ट्रैक्ट घोषित किया जा सकता है। याद रखें कि क्लास में एब्स्ट्रैक्ट प्रॉपर्टी में कोई कोड नहीं होता है। get/set एक्सेसर अर्द्धकॉलन (;) के साथ व्यक्त किया जाता है। व्युत्पन्न क्लास में Set तथा get एक्सेसर को लागू करना आवश्यक है। यदि ऐब्स्ट्रैक्ट क्लास में केवल सेट एक्सेसर होता है तो हम व्युत्पन्न क्लास में केवल Set को लागू कर सकते हैं। निम्नलिखित प्रोग्राम ऐन्स्ट्रैक्ट प्रॉपर्टी को दर्शाता है-
Imports System
MustInherit Class Abstract
Public MustOverride Property X() As Integer
Get
End Get
Set
End Set
End Property
End Class ‘Abstract
Class Concrete
Inherits Abstract
Public Overrides Property X() As Integer
Get
Console. Write (“GET”)
Return 10
End Get
Set (By Val Value As Integer)
Console. Write (“SET”)
End Set
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | 283
End Property
End Class’ Concrete
Class MyClient
Public Shared Sub Main()
Dim C1 As New Concrete
C1.X = 10
Console. WriteLine (C1.X)
End Sub ‘Main
End Class ‘MyClient
वी. बी. डॉट नेट के अंदर प्रॉपर्टी भाषा स्तर पर जोड़े गये महत्वपूर्ण फीचर है। ये जी. यू. आई. प्रोग्रामिंग में बहुत उपयोगी है। याद रखें कि कम्पाइलर वस्तुतः उपयुक्त get तथा set मेथड को बनाता है जब वी. बी. डॉट नेट प्रॉपर्टी प्रारूप को पार्स (parse) कराता है।