ऑब्जेक्ट ओरिएंटेड लैंग्वेज क्या है? | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा क्या है एवं उपयोग | Object Oriented Programming Language In Hindi
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा परिचय (Introduction) – वी०वी० डॉट नेट के बारे में यह कहा जाता है कि यह सम्पूर्ण ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है। ऐसा दावा शत प्रतिशत प्रदत्त प्रोग्रामिंग के सभी कसौटी पर वी. बी. डॉट नेट खड़ा उतरता है। इस अध्याय में हम आपको इसके ऑब्जेक्ट ओरिएंटेड सही है। वी. बी. डॉट नेट में वह सारी चीजें हैं, जो एक ऑब्जेक्ट ओरिएंटेड भाषा में होनी चाहिए। बल्कि मैं यह कहूँ कि ऑब्जेक्ट प्रोग्रामिंग भाषा होने से संबंधित बातें बताने जा रहा हूँ।
इस पार्ट-3 में हम जानेगे :- ऐब्स्ट्रैक्ट क्लास (Abstract Class), माईबेस कीवर्ड (MyBase Keyword), माईक्लास कीवर्ड (MyClass Keyword), मॉड्यूल (Module)
ऐब्स्ट्रैक्ट क्लास (Abstract Class)
ऐब्स्ट्रैक्ट क्लास वैसा क्लास होता है जिसके आधार पर ऑब्जेक्ट का निर्माण नहीं होता है। इस क्लास को आधार (base) क्लास की तरह ही डिजायन किया जाता है जिसे अन्य क्लासों द्वारा इनहेरिट किया जा सकता है। ऐब्स्ट्रैक्ट क्लास प्रोग्राम विकास में डिजायन की एक अवधारणा (concept) है तथा अन्य क्लासों को बनाने हेतु यह एक आधार देता है। ऐब्स्ट्रैक्ट क्लास इंटरफेस के समान होता है। एब्स्ट्रैक्ट क्लास को डिक्लेअर करने के बाद इसके खुद का ऑब्जेक्ट नहीं बनाया जाता बल्कि इसे इनहेरिट किया जाता है।
इंटरफेस की तरह एब्स्ट्रैक्ट क्लास मेम्बर निर्धारित कर सकता है जिसे इंहेरिट करने वाले क्लास लागू करते हैं। इंटरफेस के विपरीत एक ही क्लास एब्स्ट्रैक्ट क्लास को इनहेरिट कर सकता है। एब्स्ट्रैक्ट क्लास केवल उन्हीं सदस्यों को स्पष्ट कर सकता है जिन्हें इनहेरिट कर रहे क्लास लागू करें।
1- ऐब्स्ट्रैक्ट क्लास बनाना (Creating An Abstract Class) – वी. बी. डॉट नेट में ऐब्स्ट्रैक्ट क्लास का निर्माण Mustinherit की-वर्ड का उपयोग करके बनाते हैं। ऐब्स्ट्रैक्ट क्लास किसी अन्य क्लास की तरह जितना भी मेम्बर चाहे स्पष्ट कर सकता है। ऐब्स्ट्रैक्ट क्लास के सदस्य या तो ओवरराइड किये जा सकते हैं (अर्थात् सभी व्युत्पन्न क्लास इन मेम्बर का अपना संस्करण बना सकते हैं।) या फिर ये अपरिवर्तनीय हो सकते हैं जो सभी व्युत्पन्न क्लास के लिए समान होगा। ऐब्स्ट्रैक्ट क्लास ऐब्स्ट्रैक्ट मेंम्बर भी स्पष्ट कर सकते हैं।
ऐब्स्ट्रैक्ट क्लास की तरह ही ऐब्स्ट्रैक्ट मेंम्बर अपने इम्प्लीलीमेंटेशन की कोई जानकारी प्रदान नहीं करते हैं। केवल मेम्बर टाइप, एक्सेस स्तर आवश्यक पैरामीटर तथा रिटर्न टाइम स्पष्ट होते हैं। ऐक्ट्रक्ट मेम्बर को डिक्लेअर करने के लिए हम MustOverride कीवर्ड का उपयोग करते हैं। ऐब्स्ट्रैक्ट सदस्य क्लास के अंदर ही डिक्लेअर किए जाने चाहिए।
2- ऐब्स्ट्रैक्ट क्लास को लागू करना (Implementing An Abstract Class) – जब कोई किसी ऐक्ट क्लास को इनहेरिट करता है तो यह आवश्यक होता है कि यह ऐब्स्ट्रैक्ट क्लास के द्वारा परिभाषित प्रत्येक ऐब्स्ट्रैक्ट मेम्बर को भी लागू (implement) करें। यह इप्लीमेनटेशन ऐब्स्ट्रैक्ट क्लास में स्पष्ट सदस्य को ओवरराइड करके संभव होता है।
आओ सीखें- एक कंसोल एप्लिकेशन लिखे जो ऐब्स्ट्रैक्ट क्लास के डिक्लेअरेशन तथा इम्प्लीमेनटेशन को दर्शाता है।
समाधान :
- File मैन्यू को क्लिक करें तथा New Project का चयन करें ।
- New Project डायलॉग बॉक्स खुलने के पश्चात Templates पेन में Console Application को क्लिक करें।
- Name टेक्स्टबॉक्स में My Project टाइप करें तथा OK को क्लिक करें । उसके बाद कोड डिजायनर विण्डो खुलेगा।
- निम्नलिखित कोड टाइप करें-
Module Module 1
Public MustInherit Class AbstractClass
‘declaring an abstract class with MustInherit keyword
Public MustOverride Function Add() As Integer
Public MustOverride Function Mul() As Integer
‘declaring two abstract members with MustOverride keyword
End Class
Public Class AbstractOne
Inherits AbstractClass
‘implementing the abstract class by inheriting
Dimi As Integer = 20
Dim j As Integer = 30
‘declaring two integers
Public Overrides Function Add() As Integer
Return i + j
End Function
implementing the add method
Public Overrides Function Mul() As Integer
Return i * j
End Function
‘implementing the mul method
End Class
Sub Main()
Dim abs As New AbstractOne()
‘creating an instance of AbstractOne
Console. WriteLine (“Sum is” & ” ” & abs.Add())
Console. WriteLine(“Multiplication is” & ” ” & abs. Mul())
‘displaying output
Console. Read ()
End Sub
End Module
F5 से प्रोग्राम को रन कराएँ तथा परिणाम देखें। उपरोक्त प्रोग्राम में दूसरे लाइन पर MustInherit कीवर्ड की सहायता से AbstractClass नाम से एक ऐब्स्ट्रैक्ट क्लास बना है। तथा तीसरे और चौथे लाइन इस ऐब्स्ट्रैक्ट क्लास के दो मेम्बर फंक्शन Add() तथा Mul() को MustOverride कीवर्ड का उपयोग करके बनाया गया है।
उसके बाद छःवां लाइन में AbstractOne AbstractClass को इंहेरिट कर रहा है। तथा इसे Overrides की वर्ड का उपयोग से add मेथड को दसवां लाइन में इम्प्लीमेण्ट किया जा रहा है। इस प्रकार mul मेथड को भी इम्प्लीमेण्ट किया गया है।
अंत में Sub main() के अंदर AbstractOne() क्लास का एक ऑब्जेक्ट abs नाम से बना है जो दोनों फंक्शन का आउटपुट के लिए करता है। तो आप समझ गये होंगे कि एब्स्ट्रैक्ट क्लास का अपना कोई ऑब्जेक्ट नहीं होता है। तथा एब्स्ट्रैक्ट क्लास के एब्स्ट्रैक्ट मेम्बर भी हो सकते हैं।
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा क्या है इसकी विभिन्न विशेषताएं | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा वी. बी. डॉट नेट | What Is Object-Oriented Programming Language Examples
माईबेस कीवर्ड (MyBase Keyword)
My Base कीवर्ड का उपयोग क्लास के वर्तमान ऑब्जेक्ट के immediate आधार क्लास को इंगित करने के लिए होता है। उदाहरण के लिए यदि Class2 Class1 से इन्हेरिट होता है तो class1 class2 का आधार क्लास कहा जाता है तथा class2 class1 का व्युत्पन्न क्लास कहलाता है। Class1 का रेफरेंस class2 के कोड में MyBase कीवर्ड की सहायता से दिया जाता है। MyBase कीवर्ड का उपयोग आधार क्लास के उन सदस्यों को एक्सेस करने में होता है जो व्युत्पन्न क्लास में ओवरराइड या शैडो (shadow) किये जाते हैं। MyBase कीवर्ड का उपयोग किये जाने की कुछ सीमाएँ हैं-
- इसका उपयोग आधार क्लास के प्राइवेट सदस्यों को एक्सेस करने में नहीं किया जा सकता है।
- इसका उपयोग MustOverride आधार मेथड को कॉल करने में नहीं किया जा सकता है।
- इसे किसी वेरियेबल को असाइन नहीं किया जा सकता है।
- इसे किसी प्रोसीजर को पास नहीं किया जा सकता है।
- यदि आधार क्लास से अलग किसी असेम्बली में व्युत्पन्न क्लास को परिभाषित किया जाता है तो My Base कीवर्ड का उपयोग Friend चिन्हित आधार क्लास के सदस्यों को एक्सेस करने में नहीं किया जा सकता है।
- इसका उपयोग लॉजीकल क्रिया के लिये 1s ऑपरेटर के साथ नहीं किया जा सकता है।
- इसका उपयोग स्वयं को क्वालीफाई करने में नहीं किया जा सकता है। उदाहरण के लिए MyBase.MyBase.Button1_Click() स्टेटमेण्ट अमान्य है।
आओ सीखें- एक कंसोल प्रोग्राम लिखें जो MyBase की-वर्ड के कार्यान्वयन को समझाएँ।
समाधान :
- File मेन्यू को क्लिक करें तथा New Project का चयन करें ।
- New Project डायलॉग बॉक्स खुलने के पश्चात Templates पेन में Console Application को क्लिक करें।
- Name टेक्स्टबॉक्स में My Project टाइप करें तथा OK को क्लिक करें । उसके बाद कोड डिजायनर विण्डो खुलेगा।
- निम्नलिखित कोड टाइप करें-
Module Tester
Sub Main()
Dim circle As Circle
circle = New Circle(37, 43, 2.5) ‘ instantiate Circle
Console.WriteLine(“X coordinate is” & circle.X & vbCrLf & _
“Y coordinate is” & circle.Y & vbCrLf & “Radius is” & _
circle.Radius)
circle.X = 2
circle.Y = 2
circle.Radius = 4.25
Console. WriteLine (“The new location and radius of circle are ” &_
vbCrLf & circle.ToString())
Console.WriteLine(“Diameter is” &_
String.Format(“{0:F)”, circle.Diameter()))
Console.WriteLine(“Circumference is” &_
String.Format(“{0:F)”, circle.Circumference()))
Console.WriteLine(“Area is ” & String.Format(“(0:F)”, circle.Area()))
Console.ReadLine()
End Sub
End Module
Public Class Circle
Inherits Point
Private mRadius As Double
Public Sub New()
Radius=0
End Sub’ New
Public Sub New(ByVal xValue As Integer,
ByVal y Value As Integer, ByVal radius Value As Double)
MyBase.New(xValue, y Value)
Radius = radius Value
End Sub New
Public Property Radius() As Double
Get
Return mRadius
End Get
Set(ByVal radius Value As Double)
If radius Value > 0 Then
mRadius = radius Value
End If
End Set
End Property’ Radius
Public Function Diameter() As Double
Return mRadius *2
End Function’ Diameter
Public Function Circumference() As Double
Return Math.PI Diameter
End Function Circumference
Public Overridable Function Area() As Double
Return Math.PI* mRadius ^2
End Function ‘ Area
Public Overrides Function ToString() As String
Return “Center =” & MyBase.ToString() &
“: Radius= & mRadius
End Function’ ToString
End Class
Public Class Point
Private mX, mY As Integer
Public Sub New()
X=0
Y=0
End Sub New
Public Sub New(ByVal x Value As Integer,___
ByVal y Value As Integer)
X=xValue
Y = y Value
End Sub New
Public Property X() As Integer
Get
Return mX
End Get
Set(ByVal value As Integer)
mX = value
End Set
End Property ‘ X
Public Property Y() As Integer
Get
Return mY
End Get
Set(ByVal value As Integer)
mY = value
End Set
End Property ‘ Y
Public Overrides Function ToString() As String
Return “[” & mX & “, ” & mY & “]”
End Function’ ToString
End Class F5 की दबाकर प्रोग्राम को रन करें परिणाम प्रकट होगा। उपरोक्त कोडिंग में कई स्थान पर MyBase की वर्ड का उपयोग हुआ है। आप इसकी उपयोगिता को इस प्रोग्राम के माध्यम से समझ सकते हैं।
माईक्लास कीवर्ड (MyClass Keyword)
MyClass को समझने के लिए इस कोड को पहले देखें-
Class Parent
Public Overridable Sub p1()
Console.Write(“Parent.p1”)
End Sub
Public Sub p2()
MyClass.p1()
यहाँ MyClass कीवर्ड को उपयोग कर यह बताया जा रहा है कि सभी व्युत्पन्न क्लास आधार/एक्स्ट्रैक्ट क्लास को इंगित
करता है जहाँ जहाँ MyClass प्रकट है।
End Sub
End Class
Class Child
Inherits Parent
Public Overrides Sub p10)
Console.Write(“Child.p1”)
MyBase.p2()
End Sub
End Class
Sub Main()
Dim p As Parent
Dim e As Child
p= New Parent()
ppl) ‘OK
p.p20 OK
p New Child()
p.p1()’stack overflow error is prevented
यदि MyClass को उपरोक्त आधार क्लास में लागू नहीं किया गया तो आपको स्टेक ओवरफ्लो त्रुटि प्रदर्शित होगा। स्टैक ओवरफ्लो त्रुटि यहाँ क्यों प्रकट होता है ?
Parent.p2() Parent.pl () को कॉल करता है।
Parent.pl() पॉलिमोफिक है क्योंकि इसे ओवरराइड किया जा सकता है।
Child.p1() Parent.pl () को ओवरराइड करता है इसलिए Parent.pt() को कोई भी कॉल वस्तुत: Child.pl को कॉल करता है यदि आपके पास चाइल्ड क्लास का कोई इन्स्टैन्स है।
Child.p1 My Base.p2 को कॉल करता है।
MyBase.p2 वस्तुत: Parent.p2 है।
अब यदि आप अब तक मेरे साथ है तो त्रुटि तब आती है जब आपके पास चाइल्ड क्लास का इन्स्टैन्स है तथा आप p1 और p2 प्रोसीजर को कॉल करते हैं। pl को कॉल करने पर निम्नलिखित एक्जिक्यूशन ओवरफ्लो (execution overflow) को जन्म देता है-
Child.p1 -> Parent.p2 -> Child.p1 -> Parent.p2 -> Child.p1 > इत्यादि
तथा ये चक्र (cycle) तब तक दोहराता है जब तक कि हमारे पास कोई स्टैक स्पेस नहीं बचता है। p2 प्रोसीजर को कॉल करने पर निम्नलिखित एक्जिक्यूशन फ्लो प्रकट होता है-
Child.p2-> Child.p1 -> Parent. p2 -> Child p1-> Parent.p2-> Child.p1 -> इत्यादि
MyClass कीवर्ड को आधार क्लास में लागू करने पर यह बताता है कि सभी व्युत्पन्न क्लास आधार क्लास के मेथड का ही उपयोग करेंगे तथा इस तरह स्टैक ओवरफ्लो त्रुटि को रोका जा सकता है। देखें निम्नलिखित कोड को-
p.p2() ‘स्टैक ओवरफ्लो त्रुटि रोका गया
c = New Child()
c.p1() ‘स्टैक ओवरफ्लो त्रुटि रोका गया
c.p2) ‘स्टैक ओवरफ्लो त्रुटि रोका गया
End Sub
मॉड्यूल (Module)
विजुअल बेसिक तथा विजुअल बेसिक डॉट नेट में मॉड्यूल की अवधारणा बिल्कुल अलग है। विजुअल बेसिक डॉट नेट चूँकि एक संपूर्ण ऑब्जेक्ट ओरिएण्टेड प्रोग्रामिंग भाषा है अतः इसमें मॉड्यूल का उपयोग प्रोग्रामरों द्वारा बहुत कम किया जाता है। विजुअल बेसिक 6.0 तक के संस्करणों में मॉड्यूल एक फाइल के रूप में कार्य करता था जो समान उद्देशीय कोम को रखता है।
मॉड्यूल विजुअल बेसिक डॉट नेट में रेफ्रेन्स टाइप (reference type) को परिभाषित करता है जो पूरे नेमस्पेस (namespace) में उपलब्ध होता है। मॉड्यूल (या स्टैण्डर्ड मॉड्यूल) क्लास की तरह ही होता है परन्तु इसमें कुछ महत्वपूर्ण फर्क है।
प्रत्येक मॉड्यूल का बिल्कुल एक इनस्टैन्स (instance) होता है तथा इसे बनाने की या वेरियेबल असाइन करने की आवश्यकता नहीं होती है। मॉड्यूल्स इनहेरिटेन्स को सपोर्ट नहीं करता है। मॉड्यूलस इनटरफेस को भी लागू नहीं करता है। यह ध्यान दें कि मॉड्यूल क्लास अथवा स्ट्रक्चर की तरह नहीं होते हैं। आप प्रोग्रामिंग एलिमेण्ट को घोषित करके मॉड्यूल का डाटा टाइप नहीं रख सकते हैं।
इनस्टैन्स क्या है ?
इनस्टैन्स सामान्यतः किसी चल रहे प्रोसेस विशेषकर जैसाकि क्लास के इनस्टैन्स में किसी ऑब्जेक्ट को इंगित करता
है। नये ऑब्जेक्ट (या क्लास के इन्स्टैनस) को बनाने की प्रक्रिया इन्स्टैनसिएशन (instantiation) कहा जाता है।
आप मॉड्यूल का उपयोग केवल नेमस्पेस स्तर पर कर सकते हैं। इसका अर्थ यह है कि मॉड्यूल के लिए डिक्लेअरेशन संदर्भ सोर्स फाइल या नेमस्पेस होना चाहिए तथा यह कोई क्लास, स्ट्रक्चर, मॉड्यूल, इंटरफेस, प्रॉसीजर या ब्लॉक नहीं हो सकता। आप मॉड्यूल के अंदर मॉड्यूल नहीं रख सकते हैं।
मॉड्यूल आपके प्रोग्राम के समान लाइफटाइम रखते हैं क्योंकि इनके मेम्बर शेअर्ड होते हैं। इनके भी लाइफटाइम प्रोग्राम के समान होते हैं।
मॉड्यूलस का डिफॉल्ट एक्सेस फ्रेण्ड होता है। परन्तु आप उनके एक्सेस स्तर को एक्सेस मॉडिफायर की सहायता से एडजस्ट कर सकते हैं।
मॉड्यूल के सभी सदस्य पूर्णतः शेअर्ड होते हैं।
मॉड्यूल को लिखने का यह प्रारूप है-
[<attributelist>] [accessmodifier] Module modulename
[statements]
End Module
जहाँ attributelist तथा accessmodifier ऐच्छिक हैं। accessmodifier public या friend हो सकता है। name मॉड्यूल का नाम है तथा यह अनिवार्य अवयव है। Statements वे हैं जो इस मॉड्यूल के वेरियेबल, प्रॉपर्टी, इवेण्ट, प्रॉसीजर तथा नेस्टेड टाइप्स को परिभाषित करते हैं। End Module मॉड्यूल परिभाषा को समाप्त करता है।
उदाहरण के लिए इस कोड को देखें-
Public Module Module 1
Sub Main()
Dim UserName As String = InputBox (“What is your name ?”)
MsgBox(“User name is” & UserName)
End Sub
‘ Insert variable, property, procedure and event procedures
End Module
1- शेअर्ड मेम्बर्स (Shared Members) – शेअर्ड सदस्य प्रॉपर्टी, प्रॉसीजर तथा फील्ड होते हैं जो क्लास अथवा स्ट्रक्चर के सभी इंस्टैन्स के द्वारा शेअर किये जाते हैं। कुछ प्रोग्रामिंग भाषाओं के द्वारा ऐसे आइटमों को स्टैटिक सदस्य कहते हैं।
शेअर्ड फील्ड तथा प्रॉपर्टी तब उपयोगी होते हैं जब आप के पास ऐसा सूचना होता है जो क्लास का हिस्सा होता है। परन्तु क्लास के किसी एक इन्स्टैन्स के लिए विशेष नहीं होता है। जब आप किसी शेअर्ड फील्ड तथा प्रॉपर्टी को बदलते हैं तब आप उस क्लास तथा क्लास के सभी इनस्टैनसेज से संबद्ध मान को बदलते हैं। दूसरी ओर, किसी इनस्टैन्स से संबंधित नॉन शेअर्ड फील्ड अथवा प्रॉपर्टी के मान के बदलने पर क्लास के अन्य इनस्टैनसेज में उस फील्ड या प्रॉपर्टी के मान को प्रभावित नहीं करता है।
इस प्रकार शेअर्ड फील्ड तथा प्रॉपर्टी ग्लोबल वेरियेबल की तरह आचरण करता है जो केवल क्लास के इनस्टैनसेज से अथवा क्लास नाम के क्वालिफिकेशन के साथ एक्सेस किया जा सकता है। शेअर्ड फील्ड तथा प्रॉपर्टीज के बगैर आपको इस परिणाम को प्राप्त करने के लिए मॉड्यूल स्तर वेरियेबलों को उपयोग करने की आवश्यकता पड़ती है। किन्तु मॉडयूल स्तर वेरियेबल आपके क्लास को समझना तथा मेनटेन करना कठिन बनाता है। तथा मॉड्यूल स्तर वेरियेबल को इस तरह उपयोग करने से एनकैप्सूलेशन की अवधारणा की अवहेलना करते हैं जिन्हें क्लास व्यक्त करता है।
शेअर्ड प्रॉसीजर क्लास के मेथड होते हैं जो क्लास के किसी विशेष इनस्टैन्स से संबद्ध नहीं होते हैं। उदाहरण के लिए Mathक्लास में परिभाषित Cos मेथड शेअर्ड मेथड होता है। आप ऑब्जेक्ट के मेथड के रूप में अथवा क्लास से सीधे-सीधे शेअर्ड प्रॉसीजर को कॉल कर सकते हैं। शेअर्ड प्रॉसीजर तथा प्रॉपर्टी को क्लास के इनस्टैनसेज का एक्सेस प्राप्त नहीं होता है। इसी कारण से शेअर्ड मेथड में नॉन शेअर्ड डाटा सदस्यों के केवल क्लालिफाइड रेफ्रेन्स ही शेअर्ड मेथड में अनुमति दिये जाते हैं।
नोट : यह अनुशंसित है कि आप वैसे कोड न लिखें जिसमें आप क्लास के इंस्टैन्स के माध्यम से शेअर्ड मेम्बर को एक्सेस करते हैं। ऐसा इसलिए कि कम्पाइलर शेअर्ड मेम्बर के क्वालिफिकेशन को मान्यता नहीं देते हैं तथा इसे इस तरह समझते हैं जैसेकि इन्हें क्लास के माध्यम से सीधे एक्सेस किये गये हों।
कुछ परिस्थितियों में, आप कोड को रन करने के लिए क्वालिफायिंग ऑब्जेक्ट के लिए इच्छा कर सकते हैं तथा इसीलिए विजुअल बेसिक कम्पाइलर क्लास के इन्स्टैन्स के माध्यम से शेअर्ड मेम्बर को एक्सेस करने के लिए चेतावनी जनित करता है। इंटेलिसेंस क्लास के इनस्टैन्स के लिए शेअर्ड मेम्बरों को डिस्प्ले नहीं करता है।
निम्नलिखित कोड एक शेअर्ड फील्ड, दो इन्स्टेनस फील्ड तथा एक शेअर्ड मेथड बनाकर यह दिखाता है कि शेअर्ड सदस्य किस प्रकार कोड में ऑपरेट करते हैं-
Public Class Item
Public Shared Count As Integer = 1
Public Shared Sub ShareMethod())
MsgBox(“Current value of Count: ” & Count)
End Sub
Public Sub New(ByVal Name As String)
‘Use Count to initialize SerialNumber.
Me.SerialNumber = Count
Me.Name = Name
‘Increment the shared variable
Count += 1
End Sub
Public SerialNumber As Integer
Public Name As String
Public Sub InstanceMethod()
MsgBox(“Information in the first object: ” &.
Me.SerialNumber & vbTab & Me. Name)
End Sub
End Class
Sub TestShared
‘Create two instances of the class.
Dim part1 As New Item (“keyboard”)
Dim part2 As New Item (“monitor”)
part1.InstanceMethod)
part2.InstanceMethod()
Item.ShareMethod()
End Sub
जब आप TestShared प्रॉसीजर को एक्जिक्यूट करते हैं तब क्लास में दो इनस्टैन्स बनते हैं। कंस्ट्रक्टर शेअर्ड फील्ड Count का उपयोग कर SerialNumber इनस्टैन्स फील्ड को इनिशिअलाइज करता है तथा Count को बढ़ाता है। यह तकनीक प्रत्येक इनस्टैन्स को स्वतः एक अलग क्रमांक संख्या देता है। दो इनस्टैन्स के बनने के बाद InstanceMethod नामक इन्स्टैन्स मेथड दोनों ऑब्जेक्ट पर कॉल किया जाता है तथा SharedMethod नामक शेअर्ड मेथड भी कॉल होता है।
इसका परिणाम यह होगा-
Information in the first object: 1 keyboard
Information in the second object : 2 monitor
Current value of the shared count field: 3