2011-11-28 11 views
23

में ऑटो-कार्यान्वित गुणों के लिए डिफ़ॉल्ट मान कैसे सेट करें मुझे पता चला कि सी # 3.0 ऑटो-कार्यान्वित गुणों की एक नई सुविधा के साथ आता है, मुझे यह पसंद आया क्योंकि हमें अतिरिक्त निजी विविधता घोषित करने की आवश्यकता नहीं है इस (पहले संपत्ति की तुलना), पहले मैं एक संपत्ति उपयोग कर रहा था यानीएएसपी.नेट

private bool isPopup = true; 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 

अब मैं यानी

public bool IsPopup 
{ 
    get; set; 
} 

मैं इस का डिफ़ॉल्ट मान सेट करना चाहते हैं स्वत: लागू संपत्ति में परिवर्तित कर दिया है इसका उपयोग किए बिना संपत्ति को सचमुच पेज_इनिट विधि में भी नहीं, मैंने कोशिश की लेकिन सफल नहीं हुआ, क्या कोई भी हो सकता है एक यह बताता है कि यह कैसे करें?

+3

इसे निर्माता –

उत्तर

39

आप डिफ़ॉल्ट निर्माता में संपत्ति को प्रारंभ कर सकते हैं:

public MyClass() 
{ 
    IsPopup = true; 
} 

सी # 6.0 के साथ यह सामान्य सदस्य क्षेत्रों की तरह घोषणा पर संपत्ति प्रारंभ करने में संभव है:

public bool IsPopup { get; set; } = true; // property initializer 

अब यह भी है वास्तविक रीड-ओनली स्वचालित प्रॉपर्टी बनाने के लिए संभव है जिसे आप या तो सीधे या कन्स्ट्रक्टर में प्रारंभ कर सकते हैं, लेकिन कक्षा के अन्य तरीकों में सेट नहीं हो सकते हैं।

public bool IsPopup { get; } = true; // read-only property with initializer 
+0

में शुरू करें धन्यवाद, मुझे लगता है कि यह एकमात्र तरीका है। –

+0

अधिक विशिष्ट उत्तरों की तलाश में, इसके लिए मुझे कन्स्ट्रक्टर में अतिरिक्त कोड लिखना है, क्या पुराने सम्मेलनों का उपयोग किये बिना ऑटो-कार्यान्वित संपत्ति में इसे लिखने का कोई तरीका नहीं है। –

+2

किसी भी तरह आपको अपनी संपत्ति शुरू करना है।चूंकि कोई बैकिंग फ़ील्ड नहीं है (यह कंपाइलर द्वारा उत्पन्न होता है), कोई अन्य विकल्प नहीं है। इन परिस्थितियों में मैं पूर्ण गुण लिखता हूं, सौभाग्य से आप ऐसा करने के लिए इंटेलिजेंस प्राप्त करते हैं। – slfan

0

आप की कोशिश की DefaultValueAttribute

+0

नहीं, जैसा कि मैंने कभी भी उपयोग नहीं किया है .net 4.0 –

+9

ठीक है, इसलिए मुझे पता चला कि यह सही तरीका नहीं था। ऐसा लगता है कि DefaultValueAttribute सिर्फ मेटा डेटा को निर्देश देता है कि एक संपत्ति का डिफ़ॉल्ट मान हो सकता है और वास्तव में इसे सेट नहीं करता है। इसलिए मुझे उम्मीद है यह किसी की मदद करता है। –

6

गुण एक ऑटो संपत्ति के लिए निर्दिष्ट समर्थन क्षेत्र पर लागू नहीं हैं तो कोई डिफ़ॉल्ट मान के लिए एक विशेषता संपत्ति के इस प्रकार के लिए काम नहीं करेगा है,।

हालांकि, आप एक ऑटो संपत्ति को प्रारंभ कर सकते हैं:

VB.NET

Property FirstName As String = "James" 
Property PartNo As Integer = 44302 
Property Orders As New List(Of Order)(500) 

सी # 6.0 और उसके बाद

public string FirstName { get; set; } = "James"; 
public int PartNo { get; set; } = 44302; 
public List<Order> Orders { get; set; } = new List<Order>(500); 

सी # 5.0 और

नीचे

दुर्भाग्य से, 6.0 से नीचे सी # संस्करण इसका समर्थन नहीं करते हैं, इसलिए आपको कन्स्ट्रक्टर में ऑटो गुणों के लिए डिफ़ॉल्ट मान प्रारंभ करना होगा।

+1

जानकारी के लिए धन्यवाद –

+1

अच्छा संपादन ईगल-आई, सी # 6.0 शामिल करने के लिए इसे अद्यतन करने के लिए धन्यवाद। –

0
using System.ComponentModel; 

[DefaultValue(true)] 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 
+3

क्या आपने अक्षत जीवन शर्मा का जवाब देखा था? –

+0

क्या यह "कॉपी और पेस्ट" था? –

+2

@ जीवन शर्मा का यह समझने का जवाब यह है कि ऐसा करने का सही तरीका नहीं है। –

0

आप की तरह नीचे

एक इस विधि का लाभडिफ़ॉल्ट संपत्ति के मूल्य उपयोग कर सकते हैं आप बूलियन प्रकार

using System.ComponentModel; 

public class ClassName 
{ 
    [DefaultValue(true)] 
    public bool IsPopup{ get; set; } 
} 
के लिए शून्य मान की जाँच करने की जरूरत नहीं है है
+2

यह वास्तव में डिफ़ॉल्ट मान निर्धारित नहीं करता है, यह केवल इंगित करता है कि डिफ़ॉल्ट मान –

+0

@JoeFlateau क्या आप समझा सकते हैं कि दोनों तरीकों का अंतर क्या है? जब मैं उस संपत्ति को नियंत्रक से एक्सेस करता हूं तो उसका मूल्य सत्य होता है। इसलिए फिर ? – Sampath

+4

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