2012-01-26 10 views
7

मैं की तरह स्वत: गुण नेट, में सी # यह इतना आसान private इस तरह के रूप में अपनी set अनुभाग की घोषणा के द्वारा readonly संपत्ति घोषित करने के लिए:निजी सेट के साथ केवल संपत्ति या संपत्ति को मुझे vb.net में उपयोग करना चाहिए?

public String Name{ get; private set; } 

लेकिन जब मैं करने की कोशिश की VB.NET में मैं हैरान था कि यह है कि नहीं उल्लेख किया here का समर्थन किया और मैं इसे लिखने के लिए इस प्रकार है:

Private _Name as String 
Public ReadOnly Property Name as String 
    Get 
     return _Name 
    End Get 
End Property 

या:

Private _Name as String 
Public Property Name as String 
    Get 
     return _Name 
    End Get 
    Private Set(value as String) 
     _Name = value 
    End Set 
End Property 

VB.NET में इन घोषणाओं के बीच क्या अंतर है, जिसे प्राथमिकता दी जाती है और क्यों?

संपादित

एक जिस पर सभी संकलन समय, क्रम या प्रदर्शन को प्रभावित करेगा?

उत्तर

6

ReadOnly के मामले में, केवल अंतर्निहित चर के उपयोग वाले लोग अंतर्निहित मान (उदाहरण के लिए, उसी वर्ग के तत्वों को, उदाहरण के लिए) को सीधे इस तरह के परिवर्तन को लागू कर सकते हैं। बाद के मामले में, Private Set - यह वही है - कक्षा के दायरे के भीतर तत्व अंतर्निहित मूल्य बदल सकते हैं, लेकिन संपत्ति के माध्यम से ऐसा कर सकते हैं।

जिसे किसी को प्राथमिकता दी जाती है वह परिस्थिति संबंधी है: गुणों का एक लाभ यह है कि आप एक विधि की तरह, परिवर्तन लागू करते समय आगे कार्यान्वयन कर सकते हैं (हालांकि साइड इफेक्ट्स से बचा जाना चाहिए, आप 'मान्य' हो सकते हैं और अपवाद ले सकते हैं, उदाहरण के लिए)। यदि हमेशा मान सेट करते समय कुछ और करने के लिए किया जाता है, जो मूल्य को सेट करने के लिए दृढ़ता से संबंधित है, तो आप इसे इस प्रॉपर्टी सेटर में कर सकते हैं, क्योंकि हर जगह कार्यान्वयन कोड के विपरीत set है।

1

पहला ब्लॉक आपको केवल नाम का मूल्य प्राप्त करने की अनुमति देगा। आप नाम सेट नहीं कर सकते हैं।

दूसरा ब्लॉक आपको कक्षा के भीतर से नाम का मूल्य निर्धारित करने की अनुमति देता है। उदाहरण:

Me.Name = "new value" 

मैं विकल्प 1 का चयन करूंगा क्योंकि दूसरा विकल्प वर्बोज़ बिना किसी वास्तविक मूल्य प्रदान किए।

0

पहली संपत्ति घोषणा ReadOnly बनाता है ताकि संपत्ति को संशोधित नहीं किया जा सके। दूसरा Private Set उस श्रेणी के भीतर संपत्ति को संशोधित करने की अनुमति देता है जिसमें आप Me.Name = "str" में काम कर रहे हैं।

दोनों मामलों में अंतर्निहित मूल्य अभी भी _Name = "str" का उपयोग कर कक्षा में बदला जा सकता है।

संबंधित मुद्दे