2011-12-21 13 views
8

साथ संपत्ति मैं VB.NET में कुछ अजीब हो गया है, इससे पहले कि नोटिस कभी नहीं ...पैरामीटर

मैं VB.NET पैरामीटर के साथ एक संपत्ति होने में एक वर्ग है और मैं उपयोग करने के लिए है कि चाहते हैं अन्य सी # कक्षा में संपत्ति VB.NET कक्षा का ऑब्जेक्ट करके, लेकिन क्लास ऑब्जेक्ट उस संपत्ति को नहीं दिखा रहा है, क्या कोई मुझे बता सकता है कि मैं उस संपत्ति को सी # या नहीं कर सकता हूं या नहीं।

  • यदि हां, तो कैसे?
  • यदि नहीं, तो सीएलआर का क्या अर्थ है?

यहाँ मेरी कोड है ...

Public Property AsString(ByVal name As String) As String 
    Get 
      //Some code 
    End Get 
    Set(ByVal value As String) 
      //Some code 
    End Set 
End Property 

नोट: मैं के रूप में यह DLL संकलित किया गया है VB.NET कोड बदल नहीं सकते।

अग्रिम धन्यवाद

+0

के साथ काम आप के साथ एक संपत्ति से क्या मतलब है दो पैरामीटर मान देना है अन्य डिफ़ॉल्ट मान है पैरामीटर? –

+1

आप [सीएलआर] (http://en.wikipedia.org/wiki/Common_Language_Runtime) का जिक्र क्यों करते हैं? –

+0

मुझे पता है कि यह 4 साल बाद है, लेकिन मुझे अब तक ऐसा नहीं करना पड़ेगा। तो क्या यह अभी भी मामला है कि सी # उन गुणों का समर्थन नहीं करता है जिनमें पैरामीटर हैं? मैंने इसे वीबी में देखा है, लेकिन इसे कभी सी # में नहीं देखा है। मुझे लगता है कि जवाब हाँ है, सी # इसका समर्थन नहीं करता है। मैं बस इसे सत्यापित करना चाहता हूं। – Rod

उत्तर

10

parameterised गुण get_ और set_ तरीकों को बदल रहे हैं।

string name = "Foo"; 
string value = "Bar"; 
MyObject.set_AsString(name, value); 
string fooValue = MyObject.get_AsString(name); 
+0

ओह! मैं आप लोगों को प्यार करता हूँ!! बहुत बहुत धन्यवाद ... – ANKIT

6

सी # अनुक्रमित गुणों का समर्थन नहीं करता है जिनमें डिफ़ॉल्ट कीवर्ड नहीं है। आप सेटटर को कॉल करने के लिए प्रॉपर्टी गेटर और set_AsString() को कॉल करने के लिए get_AsString() का उपयोग सरल करते हैं। तरीके, गुण नहीं। उन्हें आसानी से IntelliSense सूची में दिखाना चाहिए।

यह भी ध्यान दें कि set_AsString() को दो तर्कों की आवश्यकता है भले ही आपने संपत्ति सेटर को अनुक्रमित किया हो। कुछ भी पास करें, शून्य कर देगा।

Fwiw, शायद यह उदाहरण है कि सी # टीम ने सामान्य मामले में अनुक्रमित गुणों का समर्थन क्यों नहीं किया। गेटर और सेटर के बीच विसंगति दर्दनाक है। वीबीनेट टीम के पास कोई विकल्प नहीं था, विजुअल बेसिक ने उन्हें बहुत पहले था। नेट के आसपास आने से पहले। यह सी # संस्करण 4 में आंशिक वापसी करता है हालांकि, अनुक्रमित गुण COM इंटरफेस पर समर्थित हैं। COM इंटरऑप प्रोग्रामिंग उनके बिना बहुत दर्दनाक है। विशेष रूप से कार्यालय ऑब्जेक्ट मॉडल में।

+0

आप किस "मेल नहीं खाते" के बारे में बात कर रहे हैं? संपत्ति सेटर अनुक्रमित है; सेटर के लिए "पैरामीटर सूची" में केवल मूल्य शामिल है, क्योंकि यह एकमात्र चीज है जिसे संपत्ति परिभाषा में निर्दिष्ट नहीं किया गया था।एक अनुक्रमित और गैर-अनुक्रमित संपत्ति का एक ही नाम होने पर थोड़ा सा स्पष्ट अस्पष्टता हो सकती है, और गैर-अनुक्रमित संपत्ति के प्रकार में एक डिफ़ॉल्ट अनुक्रमणिका है, लेकिन वास्तविकता में कोई अस्पष्टता नहीं है: 'thing.prop (x)' यदि कोई मौजूद है तो उपयुक्त अनुक्रमित संपत्ति से जुड़ जाएगा; यदि कोई गैर-अनुक्रमित एक का उपयोग करना चाहता है और परिणाम को इंडेक्स करना चाहता है, तो कोई '(thing.prop) (x) 'का उपयोग कर सकता है। – supercat

+0

ऐसी कोई चीज़ उपयोगी हो सकती है यदि कोई व्यक्ति उदा। एक शब्दकोष जो क्रम में कुंजी और मान रखता था, और कुंजियों के माध्यम से मानों को एक्सेस करने की अनुमति देने के अलावा संख्यात्मक अनुक्रमणिका के माध्यम से कुंजी या मानों को एक्सेस करने की अनुमति दी गई थी। 'MyDict.Keys (2) 'तीसरी कुंजी जोड़ा जाएगा, और' MyDict.Values ​​(2)' इसके अनुरूप मान होगा। कोई भी 'माईडिक्ट.केस' और 'माईडिक्ट। वैल्यूज' के समान परिणाम प्राप्त कर सकता है, प्रत्येक एक स्ट्रक्चर को वापस लौटाता है जिसमें डिक्शनरी का संदर्भ होता है, और उसके पास एक इंडेक्सर होता है जो उस डिक्शनरी पर उपयुक्त फ़ंक्शन कहलाता है, लेकिन यह अधिक होगा। – supercat

+0

अगर उन्होंने इसे सी ++/सीएलआई में पसंद किया और लागू किया कि गेटर और सेटर को समान पैरामीटर को परिभाषित करना और उपयोग करना है, तो कोई भ्रम नहीं होना चाहिए: 'सार्वजनिक स्ट्रिंग स्रोत [int i_ixSource] {get (int i_ixSource) {। ..} सेट (int i_ixSource) {...}} 'वर्तमान में यह मेरे लिए गधे में एक बड़ा दर्द है जो मेरे सी ++/सीएलआई कोड में लागू होने वाले दर्जनों अच्छे पैरामीटर गुणों के आसपास काम करने के लिए काम करता है जबकि सी # में परिवर्तित होता है। –

0

यू वास्तव में देखा है अगर वहाँ एक अपने का नाम है अपनी संपत्ति में दो पैरामीटर हैं और इसलिए यू जब यू कि