COM ऑटोमेशन एक डिफ़ॉल्ट संपत्ति का समर्थन करता है, संपत्ति जिसमें विवाद 0 है। इसका उपयोग वीबी 6 कोड में बहुत प्रभाव से किया जाता है, वास्तव में कॉम्पैक्ट कोड उत्पन्न करता है। एक विशिष्ट उदाहरण है:
rs!Customer = "foo"
कौन सा वाक्य रचना चीनी है के लिए:
rs.Fields.Item("Customer").Value = "foo"
तीन डिफ़ॉल्ट गुण यहाँ मूल बयान में नामित होने के बिना इस्तेमाल किया जा रहा। रिकॉर्ड्स इंटरफ़ेस में फ़ील्ड्स प्रॉपर्टी को डिफ़ॉल्ट संपत्ति के रूप में फ़ील्ड इंटरफ़ेस संदर्भ का उत्पादन होता है। फ़ील्ड इंटरफ़ेस संदर्भ का उत्पादन करने वाली डिफ़ॉल्ट (अनुक्रमित) संपत्ति के रूप में आइटम प्रॉपर्टी कौन सा है। वैल्यू प्रॉपर्टी को डिफॉल्ट प्रॉपर्टी के रूप में एक वैरिएंट का उत्पादन होता है।
जो बहुत अच्छा है। हालांकि इस तरह चरम वाक्यविन्यास चीनी की कीमत दांत क्षय है। एक बयान में एक वाक्यविन्यास अस्पष्टता है:
Dim obj
obj = someObject
यहां क्या उद्देश्य है? क्या आप obj को कुछ ऑब्जेक्ट संदर्भ असाइन करना चाहते हैं? या आप कुछ ऑब्जेक्ट के डिफ़ॉल्ट संपत्ति असाइन करना चाहते हैं? बहुत अलग चीजें, obj प्रकार पूरी तरह से अलग होगा। यह कीवर्ड के साथ वीबी 6 में हल किया गया था। आप तो ऑब्जेक्ट संदर्भ प्रदान करना चाहते हैं आप लिखने के लिए है:
Set obj = someObject
और तुम छोड़ सेट या चलो का उपयोग स्पष्ट रूप से यदि आप डिफ़ॉल्ट संपत्ति मान देना मतलब है। यह बहुत भाग्यशाली है और बहुत लंबे समय तक नौसिखिया विजुअल बेसिक और वीबी स्क्रिप्ट प्रोग्रामर बेकार है।
COM ऑटोमेशन एक संपत्ति को दो सेटर्स रखने की अनुमति देकर इसे लागू करता है।आदरणीय प्रोपूट और आईडीपीएल में propputref जहां propputref वह ऑब्जेक्ट निर्दिष्ट करता है। आप इसे IDISpatch परिभाषा में भी देख सकते हैं, IDISpatch :: Invoke() विधि DISPATCH_PROPERTYPUT और DISPATCH_PROPERTYPUTREF के साथ दोनों के बीच अंतर करती है।
वीबीएनईटी को आगे बढ़ें, माइक्रोसॉफ्ट ने फैसला किया कि अस्पष्टता बहुत दर्दनाक थी और एक डिफ़ॉल्ट गैर अनुक्रमित संपत्ति की धारणा को समाप्त कर दिया था। जिसने सेट कीवर्ड को भी खुशी से सेवानिवृत्त किया। हालांकि यह एक नई समस्या पैदा करता है, अब [कॉमविज़िबल] कक्षा लिखने का कोई तरीका नहीं है जिसमें किसी ऑब्जेक्ट संदर्भ को स्वीकार करने वाले सेटर के साथ ऑब्जेक्ट प्रकार की संपत्ति हो सकती है। भाषा वाक्यविन्यास केवल एक सेटटर परमिट करता है और सीएलआर में COM इंटरऑप परत दो को संश्लेषित करने के लिए नलसाजी गुम है। उल्लेखनीय यह है कि यह सिर्फ एक चेतावनी है, आपको अभी भी प्रोपूट सेटटर मिल गया है, आपको बस प्रोपूट्रफ़ सेटटर नहीं मिलेगा। जहां तक मैं कह सकता हूं वह वही है जो आप चाहते हैं।
या तो वीबी 6 डमी क्लास में इंटरफ़ेस को परिभाषित करना या आईडीएल को स्पष्ट रूप से लिखना और midl.exe के साथ इसे संकलित करना वास्तव में चेतावनी के चारों ओर जाने का एक तरीका है। जैसा कि जॉन रिवार्ड द्वारा this question में दिखाया गया है।
स्रोत
2012-03-29 11:20:57
क्या आपने 'ऑब्जेक्ट' के बजाय 'ValueType' का उपयोग करने का प्रयास किया है? –
एमएसडीएन वर्णन करता है कि इसे एक स्ट्रक्चर के साथ कैसे किया जाए, लेकिन मैं इसे पूरी तरह से अपने आप नहीं मानता: http://msdn.microsoft.com/en-us/library/2x07fbw8(v=vs.71).aspx –
किसी भी तरह से संबंधित: http://stackoverflow.com/q/26385964/2140173 –