2010-09-08 11 views
11

के अनुरूप उदाहरण के लिए मैं कक्षा एक जो वर्ग बीVBA विरासत, सुपर

--- क्लास ए को लागू करता है ----

implements B 
public sub B_do() 
end sub 

--class बी ----

public sub do() 
end sub 

मैं ए से() से कॉल कैसे कर सकता हूं? (super.do()) तो, मैं दोनों वर्गों के लिए कुछ सामान्य चर परिभाषित कैसे कर सकता हूं? अब मैं केवल काम करता है, उप और गुण के वारिस कर सकते हैं ...

कहा: एक ही सवाल http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/5a83d794-3da1-466a-83d3-5d2eb0a054b2

कहा: यह वर्गों के hierarhy भर में चर साझा करने के लिए संभव नहीं है। आपको संपत्ति लागू करनी चाहिए (कार्यों के समान ही)।

उत्तर

19

VBA में यह करने के लिए हमेशा की तरह एक एक बी के इंटरफ़ेस को लागू होने के साथ ही बी का एक उदाहरण शामिल है, और फिर आंतरिक बी

यह करने के लिए एक के बी इंटरफ़ेस के लिए कॉल को सौंपने के लिए है पुराने सामान है, लेकिन देखना विजुअल स्टूडियो 6.0 प्रोग्रामर की मार्गदर्शिका:

http://msdn.microsoft.com/en-us/library/aa716285(VS.60).aspx

पर एक अध्याय "कई (इंटर) कोड पुन: उपयोग के चेहरे" है कि इस सम्मेलन का वर्णन करता है:

http://msdn.microsoft.com/en-us/library/aa240846(v=VS.60).aspx

तरह से एमएस में वर्णन है:

सार इंटरफेस को लागू करने के अलावा, आप अपने कोड द्वारा एक साधारण वर्ग के इंटरफेस को लागू करने चुनिंदा एक छिपा को सौंपने का पुन: उपयोग कर सकते हैं, और उसके बाद कक्षा का उदाहरण।

इसका मतलब है कि कार्यान्वयन विरासत में बहुत से स्पष्ट प्रतिनिधि विधियों की आवश्यकता है। यहां तक ​​कि एक अध्याय उपशीर्षक भी है: "क्या यह कठिन नहीं होता?"। फिर भी एक और कारण है कि VBA में OOP एक PITA (टीएम) है ...

संपादित में फिट नहीं हो एक टिप्पणी:

सवाल आप अपनी टिप्पणी में उत्पन्न उत्तर देने के लिए, ठीक है, एक ए है ए बी जब आप ए कार्यान्वयन बी के इंटरफ़ेस को बनाते हैं, तो आप अनिवार्य रूप से कह रहे हैं कि आप ए के उदाहरण का इलाज कर सकते हैं जैसे कि यह वास्तव में बी प्रकार का है। वीबीए में, जिस तरह से आप टाइप बी के चर को घोषित कर रहे हैं, और उसके बाद ए VBA का एक उदाहरण के लिए यह स्थापित करने के लिए क्या जब आप इसे एक बी की तरह फोन करने के लिए पता चल जाएगा:

Dim usedAsB as B 
Dim anA as A 

Set anA = New A 
Set usedAsB = anA 'fine since A implements B 

usedAsB.something() 'will call B_something() defined in class A 

जहाँ तक क्या आप देब में देखते हैं के रूप में खिड़की खिड़की, मुझे ऐसा नहीं लगता है कि ऐसा लगता है। और जहां तक ​​मजबूर प्रतिनिधिमंडल, मुझे यकीन नहीं है कि आपका क्या मतलब है। वीबीए स्वचालित रूप से ए कक्षा में सही तरीकों से बी इंटरफ़ेस को कॉल भेजता है। यदि आपका मतलब ऊपर वर्णित तरीके से बी के कार्यान्वयन को प्राप्त करने के लिए स्वचालित रूप से कोड उत्पन्न करना है, तो ऐसा कुछ भी नहीं है जिसे मैं वीबीए के बारे में जानता हूं। मुझे लगता है कि वीबी 6 के विभिन्न "पेशेवर" संस्करण ऐसा कर सकते हैं, लेकिन मैंने कभी भी वीबी 6 का उपयोग नहीं किया है, इसलिए मुझे नहीं पता।

+0

धन्यवाद! क्या आप वीबीए में कक्षाओं के सटीक इंस्टेंसिंग के बारे में कुछ स्रोत जानते हैं?डीबग में, मुझे लगता है कि कक्षा ए में टाइप बी का एक क्षेत्र है। इसलिए, इंटरनेट पर कहीं मुझे लगता है कि टाइप ए का ऑब्जेक्ट टाइप बी (!) का एक ऑब्जेक्ट है, वास्तव में; मजबूर प्रतिनिधिमंडल के साथ। – nikaan

+0

@ निकिता, मैं प्रोग्रामर गाइड में अन्य अध्यायों के माध्यम से पढ़ता हूं जो "ऑब्जेक्ट्स के साथ प्रोग्रामिंग" से निपटते हैं। जहां तक ​​दूसरा सवाल है, मैं अपना जवाब संपादित करने जा रहा हूं, क्योंकि यह शायद किसी टिप्पणी में फिट नहीं होगा। तो कुछ मिनटों में देखो ... – jtolle