2010-06-18 20 views
12

क्या किसी संपत्ति के निकाय के बिना डिफ़ॉल्ट मान सेट करना संभव है? अधिमानतः एनोटेशन के साथ।किसी संपत्ति के लिए डिफ़ॉल्ट मान सेट करें

[SetTheDefaultValueTo(true)] 
public bool IsTrue { get; set; } 

[SetTheDefaultValueTo(false)] 
public bool IsFalse { get; set; } 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

उत्तर

18

नहीं, वहाँ कोई मेटाडाटा के साथ एक संपत्ति के मूल्य निर्धारित करने की क्षमता में बनाया गया है। आप किसी प्रकार के फैक्ट्री का उपयोग कर सकते हैं जो प्रतिबिंब के साथ कक्षा के उदाहरण बनाएगा और फिर डिफ़ॉल्ट मान सेट कर सकता है। लेकिन संक्षेप में, आपको कन्स्ट्रक्टर (या फील्ड सेटर्स ... जो कि कन्स्ट्रक्टर को उठाए जाते हैं) का उपयोग करने की आवश्यकता है। डिफ़ॉल्ट मान सेट करने के लिए।

यदि आपके पास अपने कंडक्टर के लिए कई अधिभार हैं तो आप constructor chaining देख सकते हैं।

सी # 6 + आप कुछ इस तरह कर पा रहे हैं का उपयोग करना ...

public string MyValue { get; set; } = "My Default"; 

ओह, यह और भी मजेदार है क्योंकि लोगों को भी कुछ इस तरह का अनुरोध किया है हो जाता है ...

public string MyValue { 
    private string _myValue; 
    get { return _myValue ?? "My Default"; } 
    set { _myValue = value; } 
} 

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

+0

क्या कोई ऐसी जगह है जहां मैं इस सुविधा के लिए वोट दे सकता हूं या ऐसा कुछ? – BrunoLM

+1

आप connect.microsoft.com पर कुछ ढूंढ पाएंगे। –

+1

ईक ... मैंने इसे कोडप्रोजेक्ट पर अभी पाया है। ऑब्जेक्ट का निर्माण करने के बाद डिफ़ॉल्ट मान सेट करने के लिए यह प्रतिबिंब का उपयोग करता है। http://www.codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx –

14

कक्षा निर्माता में डिफ़ॉल्ट संपत्ति मान असाइन करें।

class MyClass 
{ 
    public MyClass() 
    { 
     IsTrue = true; 
     IsFalse = false; 
    } 

    public bool IsTrue { get; set; } 

    public bool IsFalse { get; set; } 

    [...] 

    public void Something() 
    { 
     var isTrue = this.IsTrue; 
     var isFalse = this.IsFalse; 
    } 

}

+2

इस अधिक अपने प्रश्न के बजाय यह करने के लिए एक जवाब की तरह लग रहा है। –

1

यह बहुत ही विशिष्ट उदाहरण में, आप एक तरह से कर सकते हैं:

public bool IsFalse { get; set; } 
public bool IsTrue 
{ 
    get { return !IsFalse; } 
    set { IsFalse = !value; } 
} 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

लेकिन, सामान्य रूप में, नहीं।

2

पुराना धागा। लग रहा है माइक्रोसॉफ्ट की तरह सुना और इस सुविधा 4.6+ नेट फ्रेमवर्क में उपलब्ध है (सी 6 + #) आपको इस तरह के

public string MyValue { get; set; } = "My Default"; 
3

का उपयोग आप सी # 5 का उपयोग कर रहे हैं, तो कर सकते हैं और इससे पहले, आप में यह क्या करना है एक निर्माता

लेकिन जब से सी # 6.0, ऑटो संपत्ति initializers करने की क्षमता शामिल है, और वाक्य रचना है:

public int myage { get; set; } = 33; 
संबंधित मुद्दे