2010-11-03 10 views
6

सेट अभी, गुण का उपयोग किए बिना, मैं इस मिल गया है:जोड़ना गुण पैरामीटर

public void SetNumber([Array(new int[]{8})] Byte[] number) 

आप देख सकते हैं, मैं पैरामीटर के लिए ArrayAttribute विशेषता जोड़कर कर रहा हूँ।

मैं जो करना चाहता हूं वह वही है लेकिन संपत्ति सेटटर पर है। यह काम नहीं करता:

[Array(new int[]{8})] 
public Byte[] SetNumber 
{ 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 

वहाँ set_SetNumbervalue विधि पैरामीटर के लिए विशेषता संलग्न की कोई तरीका है?

इसके अलावा, एक संबंधित प्रश्न। उत्पन्न दो विधियों (प्राप्त/सेट) में कस्टम विशेषता नहीं है। क्या कोई मुझे समझा सकता है वह क्यों है?

उत्तर

7

आप पर setparamattribute target उपयोग करने की आवश्यकता प्रॉपर्टी एक्सेसर विधियों पर नहीं, संपत्ति।

इसके अलावा, अगर आपके ArrayAttribute ही कभी मापदंडों पर लागू होता है, तो वह ऐसा परिभाषित किया जा सकता है:

[AttributeUsage(AttributeTargets.Parameter)] 
public class ArrayAttribute : Attribute { 
    // ... 
} 
+2

+1 कभी नहीं जानता था। – SLaks

+0

धन्यवाद, यह मेरी समस्या हल हो गया। – tlg

0

आप ऐसा नहीं करते हैं, जैसा कि आपने पहले उदाहरण में किया है, एक विधि बनाएं। आप सेट के मूल्य के अलावा कुछ और पास नहीं कर सकते हैं।

public Byte[] TheNumber 
{ 
    private set; 
    get 
    { 
     return null; 
    } 
} 

public void SetNumber([Array(new int[] { 8 })] Byte[] number) 
{ 
    this.TheNumber = number; 
} 
+0

Btw, यदि आप ऊपर की तरह एक संपर्क में संपत्ति है, तो आप निजी सेट का उपयोग कर सकते हैं; – CrazyDart

+0

इस लिंक को देखें http://oreilly.com/catalog/progcsharp/chapter/ch18.html – CrazyDart

+0

असल में, यह काम कर सकता है। बस कुछ पृष्ठभूमि नोट, मैं इन विधियों को एक XML फ़ाइल से उत्पन्न कर रहा हूं। पैरामीटर के रूप में उचित लंबाई सरणी उत्पन्न करने के लिए इकाई परीक्षण के लिए विशेषता है। – tlg

0

मैं कुछ नहीं कर रहा हूँ, लेकिन मेरा अनुमान है कि आप आप क्या चाहते हैं नहीं कर सकते है - आप कोई विशेषता लागू करने के लिए सेटर value पैरामीटर संपर्क में नहीं है।

और आपके दूसरे प्रश्न के लिए, एक संपत्ति इसके गेटर & सेटर विधियों से अलग है। तुम इतनी तरह सेटर विधि के लिए कोई विशेषता लागू कर सकते हैं:

public Byte[] SetNumber { 
    [param: Array(new int[] { 8 })] 
    set { 
    } 
    get { 
    return null; 
    } 
} 

दूसरे प्रश्न का सवाल है, कस्टम विशेषता पर सेट है:

public Byte[] SetNumber 
{ 
    [Array(new int[]{8})] 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 
+0

मैंने कोशिश की, लेकिन जब भी मैं प्रॉपर्टी के सेट विधि संस्करण (डीबग तत्काल विंडो में) पर GetCustomAttribute (true) का आह्वान करने का प्रयास करता हूं तब भी मुझे शून्य मिलती है। वैसे भी मुझे लगता है कि मैं अब इस विचार को छोड़ दूंगा। धन्यवाद। – tlg

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