{क्या है; सेट; } C # में वाक्य रचना?


577

मैं ASP.NET MVC सीख रहा हूं और मैं अंग्रेजी दस्तावेज पढ़ सकता हूं, लेकिन मैं वास्तव में यह नहीं समझता कि इस कोड में क्या हो रहा है:

public class Genre
{
    public string Name { get; set; }
}

इसका क्या मतलब है { get; set; }:?


4
सामान्य रूप से याद रखें - बसने वाला आपकी वस्तु को एक बुरा विचार बना सकता है। गेटर्स उल्लंघन करते हैं "एक वस्तु को बताएं कि क्या करना है, इसे जानकारी के लिए न पूछें और इसे स्वयं में हेरफेर करें"। इसलिए सामान्य तौर पर, डिफ़ॉल्ट रूप से सेटर और गेटर्स न जोड़ें। आपको उनकी आवश्यकता होगी, अक्सर, लेकिन आपको उन्हें जोड़ने से पहले हमेशा एक वास्तविक आवश्यकता ढूंढनी चाहिए। विशेष रूप से बसने वालों को उत्पादन कोड में लगभग कभी भी उपयोग नहीं किया जाना चाहिए (जहां कहीं भी संभव हो, अपरिवर्तनीयता के लिए कठोर हो और जब उत्परिवर्तन की आवश्यकता हो, तो आपको इसे आपके लिए उत्परिवर्तित करने के लिए कहना चाहिए, मूल्य निर्धारित नहीं करना चाहिए)।
बिल के

8
बस कुछ जोड़ने के लिए ... यदि आप नहीं डालते {get; set;}हैं तो आप एक फ़ील्ड बना रहे हैं लेकिन यदि आप डालते हैं तो {get; set;}आप एक संपत्ति बना रहे हैं । संपत्ति होने से कुछ चीजें आसान हो सकती हैं, खासकर जब रिफ्लेक्शन के साथ काम करना हो।
सीची

@ सेइची एक गेट-सेटर का उपयोग करके एक फ़ील्ड भी बनाता है, लेकिन यह एक छिपा हुआ है, जिसे ऑटो द्वारा निर्मित गुणों द्वारा निजी और संशोधित घोषित किया गया है; यह सब संकलक द्वारा बनाया गया है।
जोनाथन रामोस

1
क्या ऑटो गुण निजी क्षेत्रों के उद्देश्य को नहीं हराते हैं ?
मिरज़मा

जवाबों:


567

यह एक तथाकथित ऑटो संपत्ति है, और अनिवार्य रूप से निम्नलिखित के लिए एक आशुलिपि है (समान कोड संकलक द्वारा उत्पन्न किया जाएगा):

private string name;
public string Name
{
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}

93
क्लॉस, क्या आप बता सकते हैं कि इस कोड के साथ क्या होगा? यह अधिक गहन विवरण से लाभान्वित हो सकता है।
टायलरएच

3
तो, बस यह सुनिश्चित करने के लिए: यह ऐसा है जैसे कि मैंने =ऑपरेटर को ओवरलोड किया है, लेकिन केवल एक विशेष तत्व के लिए, है ना?
हाय-एंजेल

9
हमें निजी संस्करण की आवश्यकता क्यों है। : - / शर्म की बात है।
ओलिवर डिक्सन

2
@TylerH निजी चर का कारण एनकैप्सुलेशन है, प्राप्त / सेट चर प्राप्त करने या सेट करने के लिए एक "गेट" प्रदान करता है। हालाँकि, गेट / सेटर्स का उपयोग नहीं करने के कई कारण हैं क्योंकि "गेट" निजी चर के इनकैप्सुलेशन को तोड़ सकता है। (यह सुलभ नहीं होना चाहिए)
अलेक्जेंडर

4
यह स्पष्ट हो सकता है, लेकिन मैं स्पष्ट करना चाहता हूं कि आशुलिपि सचमुच उसके लिए एक आशुलिपि नहीं है। अर्थात्, कोई भी निजी चर नहीं nameबनाया गया है। यदि आपने इस निजी चर को कक्षा में संदर्भित करने का प्रयास किया, तो यह विफल हो जाएगा। मुझे यकीन नहीं है कि C # कैसे करता है, लेकिन यह ऐसा व्यवहार करता है जैसे कोई नाम के साथ एक निजी चर है, जिसे आप अपने कोड में एक्सेस नहीं कर सकते।
डेनजिलो

432

इसलिए जैसा कि मैं समझता हूं कि यह { get; set; }एक "ऑटो प्रॉपर्टी" है, जो @Klaus और @Brandon की तरह है, "बैकिंग फ़ील्ड" के साथ प्रॉपर्टी लिखने के लिए शॉर्टहैंड है। तो इस मामले में:

public class Genre
{
    private string name; // This is the backing field
    public string Name   // This is your property
    {
        get => name;
        set => name = value;
    }
}

हालाँकि, यदि आप मेरे जैसे हैं - लगभग एक घंटे पहले या तो - आप वास्तव में क्या गुण और एक्सेसर्स नहीं समझते हैं हैं, और आप कुछ बुनियादी शब्दावलियों का सबसे अच्छा समझ या तो नहीं है। MSDN इस तरह से सामान सीखने का एक बढ़िया साधन है, लेकिन शुरुआती लोगों के लिए इसे समझना हमेशा आसान नहीं होता है। इसलिए मैं इसे और अधिक गहराई से यहाँ समझाने की कोशिश करने वाला हूँ।

getऔर setकर रहे हैं accessors , वे सक्षम अर्थ में पहुँच डेटा और जानकारी के लिए निजी एक से क्षेत्रों (आमतौर पर समर्थन क्षेत्र ) और आमतौर पर से ऐसा कर सार्वजनिक गुण (के रूप में आप ऊपर के उदाहरण में देख सकते हैं)।

इस बात से कोई इंकार नहीं है कि उपरोक्त कथन बहुत ही भ्रमित करने वाला है, तो चलिए कुछ उदाहरणों पर चलते हैं। मान लीजिए कि यह कोड संगीत की शैलियों का जिक्र कर रहा है। इसलिए कक्षा शैली के भीतर, हम संगीत के विभिन्न शैलियों को चाहते हैं। मान लें कि हम 3 शैलियों चाहते हैं: हिप हॉप, रॉक, और देश। ऐसा करने के लिए हम उस वर्ग के नए उदाहरण बनाने के लिए कक्षा के नाम का उपयोग करेंगे ।

Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
                        //called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();

//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)

अब जब हमने Genre वर्ग के उदाहरण बनाए हैं तो हम 'Name' प्रॉपर्टी का उपयोग करके शैली के नाम सेट कर सकते हैं जो ऊपर सेट किया गया था।

public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now 

हम निम्नलिखित लिखकर हिप हॉप के लिए 'g1' का नाम सेट कर सकते हैं

g1.Name = "Hip Hop";

यहां जो हो रहा है वह जटिल है। जैसा कि मैंने पहले कहा था, getऔर setनिजी क्षेत्रों से ऐसी जानकारी प्राप्त करना जो आप अन्यथा उपयोग नहीं कर पाएंगे। getकेवल उस निजी क्षेत्र की जानकारी पढ़ सकते हैं और उसे वापस कर सकते हैं। setकेवल कर सकते हैं उस निजी क्षेत्र में जानकारी लिख । लेकिन दोनों के पास एक संपत्ति होने से getऔर setहम उन दोनों कार्यों को करने में सक्षम हैं। और लिखकर g1.Name = "Hip Hop";हम विशेष रूप setसे अपने नाम संपत्ति से फ़ंक्शन का उपयोग कर रहे हैं

setकहा जाता है एक अंतर्निहित चर का उपयोग करता है value। मूल रूप से इसका मतलब यह है कि किसी भी समय आप "मूल्य" देख सकते हैं set, यह एक चर का जिक्र है; "मान" चर। जब हम लिखते हैं कि g1.Name =हम चर =में पास होने के लिए उपयोग कर रहे हैं valueजो इस मामले में है "Hip Hop"। तो आप अनिवार्य रूप से इस तरह से सोच सकते हैं:

public class g1 //We've created an instance of the Genre Class called "g1"
{
    private string name;
    public string Name
    {
        get => name;
        set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because 
                              //'value' in 'g1' was set to "Hip Hop" by previously
                              //writing 'g1.Name = "Hip Hop"'
    }
}

यह नोट करना महत्वपूर्ण है कि उपरोक्त उदाहरण वास्तव में कोड में नहीं लिखा गया है। यह एक काल्पनिक कोड से अधिक है जो यह दर्शाता है कि पृष्ठभूमि में क्या चल रहा है।

इसलिए अब हमने Genre के g1 उदाहरण का नाम सेट कर दिया है , मेरा मानना ​​है कि हम नाम लिखकर प्राप्त कर सकते हैं

console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property 
                             //and returns the field 'name' which we just set to
                             //"Hip Hop"

और अगर हमने इसे चलाया तो हम "Hip Hop"अपने कंसोल में पहुंचेंगे।

तो इस स्पष्टीकरण के उद्देश्य के लिए मैं उदाहरण के साथ ही आउटपुट को पूरा करूँगा

using System;
public class Genre
{
    public string Name { get; set; }
}

public class MainClass
{
    public static void Main()
    {
        Genre g1 = new Genre();
        Genre g2 = new Genre();
        Genre g3 = new Genre();

        g1.Name = "Hip Hop";
        g2.Name = "Rock";
        g3.Name = "Country";

        Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
    }
}

आउटपुट:

"Genres: Hip Hop, Rock, Country"

18
व्यक्तिगत रूप से मैं इसे केवल इस तरह से टिप्पणी set{name = value;} // 'value' here is equal to "Hip Hop"
करूंगा

2
@iLoveUnicorns, यह डेटा एब्स्ट्रैक्शन के उद्देश्य से है । समर्थन फ़ील्ड में वास्तविक डेटा होता है। संपत्ति की परिभाषा वास्तव में परिभाषित करती है कि डेटा कैसे getऔर setतरीकों से एक्सेस किया जाता है । मैंने जो लिंक प्रदान किया है, उसमें पृष्ठ के शीर्ष पर जॉन गुट्टाग का एक उत्कृष्ट उद्धरण है। मैं उनकी किताब पढ़ने की सलाह दूंगा या फिर इस मुफ्त ऑनलाइन कोर्स को
जोसी थॉम्पसन

2
क्या हम इसका उपयोग नहीं कर सकते: public class Genre{public string Name;} इसके बजाय public class Genre{ public string Name { get; set; }}:। मेरा मतलब है, हमें भी आवश्यकता क्यों है {मिल; सेट; }?
user2048204

1
मेरी चिंता का विषय पहले से ही गूँज रहा है। यदि आप इस तरह से घोषणा करते हैं: "सार्वजनिक स्ट्रिंग नाम {get; सेट;}" और आप इस तरह से एक्सेस करते हैं: g1.Name = "हिप हॉप"; - फिर ऑब्जेक्ट ओरिएंटेशन कहां है? मुझे तथाकथित "बैकिंग फील्ड" की भी आवश्यकता नहीं है। बैकिंग फ़ील्ड भी मौजूद नहीं है, जहां तक ​​मेरा संबंध है। क्योंकि मैं केवल सार्वजनिक क्षेत्र का उपयोग करता हूं। और अगर सार्वजनिक क्षेत्र "सार्वजनिक" है, तो यह ओओ आज्ञाकारी नहीं है। चलो सब वापस COBOL पर जाते हैं।
बरूच अट्टा

1
शानदार जवाब, लेकिन अगर हमें पांडित्य हो रहा है, तो "सेट" एक म्यूटेटर है, न कि एक गौण।
पाइथलैंग

100

वो है स्वचालित गुण हैं

मूल रूप से एक बैकिंग क्षेत्र के साथ एक संपत्ति लिखने का एक और तरीका है।

public class Genre
{
    private string _name;

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

7
"बैकिंग फील्ड" क्या कहलाता है?
kn3l

4
@stackunderflow: बैकिंग फ़ील्ड वह जगह है जहाँ डेटा संग्रहीत किया जाता है। (का उपयोग करते समय क्या लौटाया जाता है get, और का उपयोग करते हुए set) अलमारी की तरह जो getऔर setका दरवाजा खोलता है।
थॉमस

5
@stackunderflow: इस उत्तर में, बैकिंग फ़ील्ड है _name। स्वचालित संपत्ति में, बैकिंग फ़ील्ड छिपा हुआ है।
जस्टिन

36

यह ऐसा करने का संक्षिप्त तरीका है:

public class Genre
{
    private string _name;

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

33

यह डेटा सदस्यों को सार्वजनिक करने के लिए एक शॉर्टकट है ताकि आपको निजी डेटा सदस्यों को स्पष्ट रूप से बनाने की आवश्यकता न हो। C # आपके लिए एक निजी डेटा सदस्य बनाता है।

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


2
केल्सी - क्या आप बता सकते हैं कि यह वाक्यविन्यास कैसे इसे "अधिक लचीला" कोड बनाता है? मैं इसे नहीं देखता। यदि आप सेटर या गेट्टर में कोई "लॉजिक" जोड़ते हैं, तो ईथर मामले में (निजी डेटा के साथ या बिना) आप अभी भी इंटरफ़ेस को तोड़ देंगे, जैसा कि यह है, और कुछ कोडिंग की आवश्यकता है।
बारूक अट्टा

18

मूल रूप से, यह एक शॉर्टकट है:

class Genre{
    private string genre;
    public string getGenre() {
        return this.genre;
    }
    public void setGenre(string theGenre) {
        this.genre = theGenre;
    }
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female

5
इस सवाल का जवाब नहीं है। ओपी गुणों की बात कर रहा था।
TheB

6
मुझे पता है कि गुण प्राप्त करें और सेट करें, यह एक उदाहरण है जो बेहतर तरीके से समझने में मदद करता है
जिरसन टवेरा

10

सी # के लिए एक ऑटो-कार्यान्वित संपत्ति है।


1
एह ... क्या इसका मतलब यह है कि आप स्ट्रिंग के लिए शून्य संदर्भ रखते हैं और फिर इसे मानक स्थान से मूल्य get; set;कहा जाता है जब इसे कहा जाता है?
औरुम एक्विला

1
हाँ यह nullकिसी भी stringचर की तरह रहता हैsomeInstanceOfGenere.Name = "someValue"
डैनियल ए। व्हाइट

6

वे सार्वजनिक संपत्ति के नाम के एक्सेसकर्ता हैं।

आप उनका उपयोग उस संपत्ति के मूल्य को Genre के उदाहरण में प्राप्त / सेट करने के लिए करेंगे।


6

यह एक ऑटो-इम्प्लीमेंटेड प्रॉपर्टी है। यह मूल रूप से C # में एक वर्ग के लिए गुण बनाने का एक छोटा तरीका है, उनके लिए निजी चर को परिभाषित किए बिना। वे आम तौर पर तब उपयोग किए जाते हैं जब किसी वैरिएबल का मान प्राप्त करते या सेट करते समय कोई अतिरिक्त तर्क की आवश्यकता नहीं होती है।

आप MSDN के स्वतः-कार्यान्वित गुण प्रोग्रामिंग गाइड पर अधिक पढ़ सकते हैं ।


6
  • गेट / सेट पैटर्न एक संरचना प्रदान करता है, जो तात्कालिक वर्ग की संपत्ति उदाहरण की सेटिंग ('सेट') या पुनर्प्राप्ति ('प्राप्त') के दौरान जोड़े जाने की अनुमति देता है, जो तब उपयोगी हो सकता है जब कुछ तात्कालिकता तर्क के लिए आवश्यक हो। संपत्ति।

  • एक संपत्ति में केवल एक 'गेट' एक्सेसर हो सकता है, जो उस संपत्ति को केवल पढ़ने के लिए किया जाता है

  • गेट / सेट पैटर्न को लागू करते समय, एक मध्यवर्ती चर का उपयोग कंटेनर के रूप में किया जाता है जिसमें एक मूल्य रखा जा सकता है और एक मान निकाला जा सकता है। मध्यवर्ती चर आमतौर पर एक अंडरस्कोर के साथ उपसर्ग होता है। यह मध्यवर्ती चर निजी है ताकि यह सुनिश्चित किया जा सके कि इसे केवल इसके गेट / सेट कॉल के माध्यम से एक्सेस किया जा सके। ब्रैंडन का उत्तर देखें, क्योंकि उसका उत्तर प्राप्त / सेट को लागू करने के लिए सबसे अधिक इस्तेमाल किए जाने वाले वाक्यविन्यास सम्मेलनों को दर्शाता है।


5

इसका मतलब यह है कि यदि आप Genre प्रकार का चर बनाते हैं, तो आप चर को संपत्ति के रूप में एक्सेस कर पाएंगे

Genre oG = new Genre();
oG.Name = "Test";

5
जब आप ऑटो-कार्यान्वित गुणों का उपयोग नहीं करते हैं, तब भी आप इसे इस तरीके से एक्सेस कर सकते हैं। यानी AIP बाहर से पहुंच के बारे में नहीं है, बल्कि एक वर्ग के अंदर घोषणा के बारे में है।
21

4

ऐसे { get; set; }सिंटैक्स को स्वचालित गुण, C # 3.0 सिंटैक्स कहा जाता है

आपको संकलन करने के लिए Visual C # 2008 / csc v3.5 या उससे ऊपर का उपयोग करना चाहिए। लेकिन आप ऐसे आउटपुट को संकलित कर सकते हैं जो .NET फ्रेमवर्क 2.0 से कम हो (कोई रनटाइम या इस सुविधा का समर्थन करने के लिए आवश्यक कक्षाएं)।


4

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

एक जोड़ कर { get; set; }करने के लिएX संपत्ति, आप इस चेतावनी नहीं मिलेगा।

विजुअल स्टूडियो 2013 और ऊपरी संस्करणों के अलावा, { get; set; }आपको जोड़कर उस संपत्ति के सभी संदर्भ देखने में सक्षम हैं।

यहाँ छवि विवरण दर्ज करें


4

इसका मूल रूप से एक आशुलिपि है। आप public string Name { get; set; }कई उदाहरणों में लिख सकते हैं, लेकिन आप इसे भी लिख सकते हैं:

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value ; } // value is a special keyword here
}

इसका उपयोग क्यों किया जाता है? इसका उपयोग किसी संपत्ति तक पहुंच को फ़िल्टर करने के लिए किया जा सकता है, उदाहरण के लिए आप संख्याओं को शामिल करने के लिए नाम नहीं चाहते हैं।

मैं आपको एक उदाहरण देता हूं:

private class Person {
    private int _age;  // Person._age = 25; will throw an error
    public int Age{
        get { return _age; }  // example: Console.WriteLine(Person.Age);
        set { 
            if ( value >= 0) {
                _age = value; }  // valid example: Person.Age = 25;
        }
    }
}

आधिकारिक तौर पर इसका नाम ऑटो-इंप्लीमेंटेड प्रॉपर्टीज है और इसकी ( प्रोग्रामिंग गाइड ) पढ़ने की अच्छी आदत है । मैं ट्यूटोरियल वीडियो C # प्रॉपर्टीज़ की सिफारिश भी करूंगा : "गेट" और "सेट" का उपयोग क्यों करें


2

जाओ सेट संपत्ति के लिए पहुँच संशोधक हैं। प्रॉपर्टी फील्ड पढ़ें। प्रॉपर्टी की वैल्यू सेट करें। Get Read-only पहुंच की तरह है। सेट केवल लिखने की पहुंच की तरह है। संपत्ति को पढ़ने के लिए लिखने के रूप में उपयोग करने के लिए दोनों मिलता है और सेट का उपयोग किया जाना चाहिए।


1
मुझे लगता है कि सेट हो जाना पहुँच संशोधक नहीं हैं, वे एक्सेस करने वाले हैं। एक्सेस मॉडिफायर इस तरह हैं: सार्वजनिक, निजी, आंतरिक आदि
रोहित अरोड़ा

1

जब संपत्ति दाईं ओर (RHS) सेट पर दिखाई देती है, तो इसे लागू किया जाता है, जब संपत्ति '=' प्रतीक के बाईं ओर (LHS) पर दिखाई देती है

ऑटो-कार्यान्वित संपत्ति के लिए, बैकिंग फ़ील्ड दृश्य के पीछे काम करता है और दिखाई नहीं देता है।

उदाहरण:

public string Log { get; set; }

जबकि एक गैर-ऑटो-कार्यान्वित संपत्ति के लिए बैकिंग फ़ील्ड अपफ्रंट है, एक निजी स्कोपेड चर के रूप में दिखाई देता है।

उदाहरण:

private string log;

public string Log
{
    get => log;
    set => log = value;
}

इसके अलावा, यह ध्यान देने योग्य है कि यहां 'गेट्टर' है और 'सेटर' विभिन्न 'बैकिंग फील्ड' का उपयोग कर सकता है।


इससे पूछे गए प्रश्न का उत्तर नहीं लगता है।
टायलरएच

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

ऑटो-जेनरेट की गई प्रॉपर्टी के लिए, जो सवाल पूछता है, उसके लिए गेट्टर और सेटर के लिए उपयोग किए जाने वाले विभिन्न बैकिंग फ़ील्ड नहीं हो सकते हैं; केवल एक समर्थन क्षेत्र है। एक गैर-ऑटो संपत्ति (जिसके बारे में सवाल नहीं पूछता है) के लिए वैचारिक रूप से एक बैकिंग क्षेत्र भी नहीं हो सकता है। इसके अतिरिक्त, आप एक असाइनमेंट ऑपरेटर के बाईं ओर एक गेट्टर के साथ एक प्रोग्राम लिख सकते हैं और एक असाइनमेंट ऑपरेटर के दाहिने हाथ की तरफ सेटर के साथ। इसलिए न केवल यह सभी जानकारी पूछे गए प्रश्न का उत्तर नहीं दे रही है, बल्कि यह सब गलत भी है।
Servy

0

निजी चर को परिभाषित करें

कंस्ट्रक्टर के अंदर और डेटा लोड करें

मैंने कॉन्स्टैंट बनाया है और डेटा को लगातार चयनित सूची वर्ग से लोड किया है।

public  class GridModel
{
    private IEnumerable<SelectList> selectList;
    private IEnumerable<SelectList> Roles;

    public GridModel()
    {
        selectList = from PageSizes e in Enum.GetValues(typeof(PageSizes))
                       select( new SelectList()
                       {
                           Id = (int)e,
                           Name = e.ToString()
                       });

        Roles= from Userroles e in Enum.GetValues(typeof(Userroles))
               select (new SelectList()
               {
                   Id = (int)e,
                   Name = e.ToString()
               });
    }

  public IEnumerable<SelectList> Pagesizelist { get { return this.selectList; } set { this.selectList = value; } } 
  public IEnumerable<SelectList> RoleList { get { return this.Roles; } set { this.Roles = value; } }
  public IEnumerable<SelectList> StatusList { get; set; }

}

0

एक संपत्ति एक परत की तरह है जो एक वर्ग के अन्य सदस्यों से निजी चर को अलग करती है। बाहरी दुनिया से ऐसा लगता है कि एक संपत्ति सिर्फ एक क्षेत्र है। एक संपत्ति का उपयोग करके पहुँचा जा सकता है

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName => $"{FirstName} {LastName}";
}

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName { get { return $"{FirstName} {LastName}"; } }
}

FullName एक संपत्ति है। तीर वाला एक शॉर्टकट है। बाहरी दुनिया से, हम FullName को इस तरह एक्सेस कर सकते हैं:

var person = new Person();
Console.WriteLine(person.FullName);

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

अधिक विस्तृत विवरण के लिए Microsoft दस्तावेज़ीकरण देखें:

https://docs.microsoft.com/en-us/dotnet/csharp/properties

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.