2009-08-21 14 views
34

मैं इस शांत अक्सर सी # दस्तावेज में देखता हूं। लेकिन यह क्या करता है?इसका क्या अर्थ है? सार्वजनिक नाम {प्राप्त करें; सेट;}

public class Car 
{ 
    public Name { get; set; } 
} 
+7

क्या मैं पूछ सकता हूं कि इसे डुप्लिकेट के रूप में क्यों चिह्नित किया गया है? 200 9 में यह पूछा गया था और "मूल" 2011 में पूछा गया था! – Nathangrad

उत्तर

40

यह के लिए आशुलिपि है। इसे automatic property कहा जाता है।

private string _Text; 

public string Text 
{ 
    get { return _Text; } 
    set { _Text = value; } 
} 

आप को छोड़कर निजी चर करने के लिए पहुँच नहीं है, जबकि कक्षा के अंदर:

+9

... हालांकि फ़ील्ड का नाम वास्तव में एक "अनपेक्षित" नाम है (उदा। '<> __ नाम') जो सी # पहचानकर्ता के रूप में अमान्य है। यह आपको सीधे आपके कोड से फ़ील्ड तक पहुंचने से रोकता है। विनिर्देश शब्द "स्वचालित रूप से कार्यान्वित संपत्ति" है, लेकिन अधिकांश लोग वास्तव में इसे एक स्वचालित संपत्ति कहते हैं :) –

+0

@phoog: निश्चित रूप से आप 'pedantism' (या जैसा कि मार्क ने इंगित किया है - 'pedantry')? : डी – stuxnetting

+0

@stuxnetting "pedantryism" एक मजाक था। मैं तो बस कह रहा हूं'। रिकॉर्ड और सभी के लिए। – phoog

10

यह एक स्वचालित रीड-राइट प्रॉपर्टी है। यह एक सी # 3.0 अतिरिक्त है। कुछ ऐसा:

public class Car { 
    private string name; 
    public string Name { get { return name; } set { name = value; } } 
} 

सिवाय इसके कि आप सीधे बैकिंग फ़ील्ड तक नहीं पहुंच सकते हैं।

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
} 

संकलक सदस्य चर उत्पन्न करता है:

3

यह ऐसा करने का बराबर है।

+1

तो यदि आप निजी चर रखना चाहते हैं तो आपको "पुराने" प्रारूप का उपयोग करना होगा (जैसा कि आपके उदाहरण में है)? – Rado

4

इसे एक ऑटो-कार्यान्वित संपत्ति कहा जाता है और new to C# 3.0 है। यह एक क्लीनर वाक्यविन्यास है जब संपत्ति तक आपकी पहुंच किसी विशेष व्यवहार या सत्यापन की आवश्यकता नहीं होती है। तो यह कोड भी पर्याप्त मात्रा में बचत होती है, लेकिन आप विकल्प छोड़ देता है बाद में एक्सेसर तर्क को संशोधित करने के व्यवहार या नियमों को बदलने की जरूरत है, तो

public class Car 
{ 
    private string _name; 
    public string Name 
    { 
    get { return _name; } 
    set {_name = value; } 
    } 
} 

: यह करने के लिए समारोह में समान है।

1

Auto-Implemented Properties

सारांश: में सी # 3.0 और बाद में, ऑटो कार्यान्वित गुण संपत्ति-घोषणा अधिक संक्षिप्त बनाने जब कोई अतिरिक्त तर्क संपत्ति accessors में आवश्यक है।

25

सरल शब्दों में उन्हें संपत्ति एक्सेसर्स के रूप में संदर्भित किया जाता है। उनके क्रियान्वयन नीचे

1.Get {वापसी नाम} प्राप्त एक्सेसर में कोड ब्लॉक निष्पादित होता है जब संपत्ति के रूप में समझाया जा सकता है पढ़ें।

2.set {name = value} सेट एक्सेसर में कोड ब्लॉक निष्पादित किया जाता है जब संपत्ति असाइन किया गया एक नया मान।

ईजी।(मान लें कि आप सी # का उपयोग कर रहे)

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. अब जब आप नीचे

    व्यक्ति पी = नए व्यक्ति() के रूप में इस संपत्ति का संदर्भ लें; // वर्ग instantiating या वस्तु बनाने ' 'वर्ग के' पी व्यक्ति '

    System.Console.Write(p.Name); //The get accessor is invoked here 
    

प्राप्तकर्ता को पर पहुंचाया गया है संपत्ति का मूल्य i.e संकलक स्ट्रिंग 'नाम' के मान को पढ़ने की कोशिश करता है।

2. जब आप

Person p = new Person(); 
p.Name = "Stack" // the set accessor is invoked here 
Console.Writeline(p.Name) //invokes the get accessor 
Console.ReadKey(); //Holds the output until a key is pressed 

सेट एक्सेसर नीचे के रूप में 'नाम' संपत्ति के लिए एक मूल्य (एक तर्क का प्रयोग करके) निरुपित असाइन मूल्य 'ढेर' करने के लिए 'नाम संपत्ति यानी 'ढेर' स्ट्रिंग 'नाम' में संग्रहित है

ouput:।

ढेर

+6

पहली जगह पाने और सेट करने का क्या कारण है, क्यों न केवल सेटिंग और प्राप्त करने के लिए एक एक्सेसर का उपयोग करें, यह सवाल सरल शब्दों में उत्तर देने में सक्षम नहीं है। – JsonStatham

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