2009-03-26 14 views
32

तो यहां कुछ वाक्यविन्यास है जो मैंने पहले कभी नहीं देखा है, क्या कोई मुझे बता सकता है कि इसका क्या अर्थ है? निश्चित नहीं है कि यह एक अमूर्त संपत्ति घोषणा या कुछ या क्या के लिए कुछ लघुरूप माना जाता है।सी # शॉर्टंड संपत्ति प्रश्न

public Class1 myVar { get; set; } 

इसके मूल्य के लिए, कक्षा 1 एक अमूर्त वर्ग है।

उत्तर

82

सी # 3.0 और बाद में, auto-implemented properties संपत्ति-घोषणाओं में कोई अतिरिक्त तर्क की आवश्यकता होने पर संपत्ति-घोषणा अधिक संक्षिप्त बनाते हैं। वे ऑब्जेक्ट्स बनाने के लिए क्लाइंट कोड भी सक्षम करते हैं जब आप निम्न उदाहरण में दिखाए गए प्रॉपर्टी की घोषणा करते हैं, तो कंपाइलर एक निजी, अनाम बैकिंग फ़ील्ड बनाता है जिसे केवल संपत्ति के माध्यम से एक्सेस किया जा सकता है और एक्सेसर्स सेट किया जा सकता है।

// Auto-Impl Properties for trivial get and set 
    public double TotalPurchases { get; set; } 
    public string Name { get; set; } 
    public int CustomerID { get; set; } 
+1

मैं आपको अधिक विस्तृत स्पष्टीकरण के लिए वोट दूंगा लेकिन मैं दिन के लिए बाहर हूं। – TheTXI

0

स्वचालित गेटर्स और सेटर्स।

7

इसे स्वचालित या auto-implemented संपत्ति कहा जाता है, और यह सार नहीं है। आप उस संपत्ति का उपयोग कर सकते हैं। संकलक दृश्यों के पीछे इसके लिए एक बैकिंग स्टोर बनाएगा।

यह संपत्ति के बजाय केवल एक फ़ील्ड का उपयोग करने जैसा है, लेकिन आपको संपत्ति अर्थशास्त्र मिलता है और आप इसे डाटाबेसिंग जैसी चीजों के लिए उपयोग कर सकते हैं जिसके लिए गुणों की आवश्यकता होती है।

+0

और बाद में आप अपने कॉलर्स पर अपना इंटरफ़ेस बदलने के बिना एक स्पष्ट कार्यान्वयन में बदल सकते हैं। –

27

यह संकलक है कि संकलक आपके लिए एक (छुपा) फ़ील्ड बनाने दें।

भी बहुत उपयोगी है:

public Class1 myVar{ get; private set; } 
+0

'संरक्षित' भी काम करता है। बस 'निजी' की तरह। मैं काफी हद तक निश्चित हूं कि आप 'get' के लिए भी पहुंच सेट कर सकते हैं, लेकिन मैंने कभी कोशिश नहीं की है। –

+1

+1 यह वही है जो मैं खोज रहा था। मैं शॉर्टेंड में कुछ शामिल करना चाहता था इसलिए 'सेट' ऑपरेशन केवल क्लास सदस्य कार्यों द्वारा किया जा सकता है। धन्यवाद :-) – shashwat

7

यह एक संपत्ति है कि अधिक कुछ नहीं करता है के लिए आशुलिपि है कि एक क्षेत्र में मूल्य भंडारण।

private Class1 _myVar; 

public Class1 myVar 
{ 
    get{ return _myVar; } 
    set{ _myVar = value;} 
} 

इसका सिर्फ एक सरल संपत्ति है कि yoy इंटरफ़ेस बदले बिना बाद में एक अधिक जटिल evantuation साथ बदल सकते: तो यह के बराबर होगा।

2

ये स्वत: कार्यान्वित गुण हैं। वे आपको कोड को अधिक संक्षिप्त बनाने की अनुमति देते हैं। आप यहाँ उनके बारे में अधिक पढ़ सकते हैं:

Auto-Implement

तुम भी कर सकते हैं accessors विभिन्न पहुँच स्तर है:

सार्वजनिक पूर्णांक myVar {मिल; निजी सेट; }

यह आपको कक्षा के बाहर की संपत्ति का खुलासा करने की अनुमति देता है और अभी भी इसे आंतरिक रूप से सेट करता है।

22

यह एक अमूर्त संपत्ति या एक इंटरफ़ेस से संपत्ति की तरह दिख सकता है लेकिन यह इससे दूर है। डेवलपर्स को गुणों का उपयोग करने के लिए प्रोत्साहित करने के लिए (क्योंकि वे कई कारणों से सबसे अच्छा अभ्यास कर रहे हैं) माइक्रोसॉफ्ट ने इस सुविधा को सी # 3 में शामिल करने का निर्णय लिया ताकि आप अधिक आसानी से संपत्ति घोषित कर सकें।

यहाँ एक संपत्ति बनाने का मानक तरीका है:

String foo; 

public String Foo 
{ 
    get { return this.foo } 
    set { this.foo = value; } 
} 

अब यह काफी टाइपिंग का एक सा की आवश्यकता है और के रूप में डेवलपर्स कोर कभी कभी हम सार्वजनिक क्षेत्र बनाने के लिए परीक्षा रहे हैं करने के लिए आलसी हैं बस कुछ समय बचाने के लिए ।

अब सी # 3 संकलक के साथ हम यह कर सकते हैं: एक ओर जहां यह थोड़ा अजीब लग रहा है

public String Foo { get; set; } 

, काम है कि संकलक अपनी ओर से कर रही है पर विचार करें। पिछले कोड इस का संकलन किया जाता है:

[CompilerGenerated]  
private string <Foo>k__BackingField; 

public string Foo 
{ 
    [CompilerGenerated] 
    get 
    { 
     return this.<Foo>k__BackingField; 
    } 
    [CompilerGenerated] 
    set 
    { 
     this.<Foo>k__BackingField = value; 
    } 
} 

तो भले ही वाक्य रचना थोड़ा अजीब आप अभी भी एक संपत्ति वास्तव में जिस तरह से आप के लिए उपयोग किया जाता है पैदा कर रहे लग रहा है।

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