2011-01-05 15 views
23

मैं विशेषता के लिए कोई पैरामीटर पास किए बिना ऐसा करने जा रहा हूं! क्या यह संभव है?संपत्ति का नाम कैसे प्राप्त करें हमारी विशेषता सेट है?

class MyAtt : Attribute { 
    string NameOfSettedProperty() { 
     //How do this? (Would be MyProp for example) 
    } 
} 

class MyCls { 
    [MyAtt] 
    int MyProp { get { return 10; } } 
} 

उत्तर

5

गुण एक प्रकार, प्रकार ही है, विधि पैरामीटर या विधानसभा के सदस्यों के लिए लागू किया मेटाडाटा कर रहे हैं। आप मेटाडाटा के लिए उपयोग किया, इसके लिए आपको मूल सदस्य ही उपयोगकर्ता GetCustomAttributes आदि करना पड़ा है चाहिए, Type के अपने उदाहरण, PropertyInfo, FieldInfo आदि

आपके मामले में यानी, मैं वास्तव में संपत्ति के नाम से होकर गुजरेगा विशेषता के लिए:

public CustomAttribute : Attribute 
{ 
    public CustomAttribute(string propertyName) 
    { 
    this.PropertyName = propertyName; 
    } 

    public string PropertyName { get; private set; } 
} 

public class MyClass 
{ 
    [Custom("MyProperty")] 
    public int MyProperty { get; set; } 
} 
+5

धन्यवाद मुझे पता है इस संपत्ति के नाम पारित करके हल किया जा सकता है, मैं संपत्ति-नाम गुजर बिना यह करने के लिए जा रहा हूँ लागू करने के लिए है कि इस API का उपयोग । तो आपकी प्रतिक्रिया के आधार पर यह संभव नहीं है। – Sadegh

+0

संभव नहीं है, गुण उन सदस्यों के बारे में जानकारी पास नहीं किए गए हैं जिनसे वे जुड़े हुए हैं। आसान होगा यदि 'विशेषता' उदाहरण 'ICustomAttributeProvider' को पारित किया गया था जिसका उपयोग इसे बनाने के लिए किया गया था, लेकिन दुख की बात यह नहीं है। –

+0

धन्यवाद मैथ्यू बहुत उपयोगी है। – Sadegh

0

आप इसे विशेषता वर्ग के भीतर ही नहीं कर सकते हैं। हालांकि, आप एक ऐसी विधि है जो किसी ऑब्जेक्ट को उस ऑब्जेक्ट की गुणों (यदि कोई हो) की सूची प्राप्त करती है जो विशेषता का उपयोग करती है। http://msdn.microsoft.com/en-us/library/ms130869.aspx

+0

का उपयोग करते हुए नीचे देखें, ठीक है, मैं वहां से कई तरीकों (आपके दृष्टिकोण की तरह) जानता हूं, लेकिन उनमें से कोई भी मेरा मामला नहीं है। – Sadegh

95

.NET 4.5 से CallerMemberNameAttribute का उपयोग करना::

public CustomAttribute([CallerMemberName] string propertyName = null) 
{ 
    // ... 
} 
+1

बहुत बढ़िया। एक ऐसी विशेषता के लिए पैरामीटर बचाता है जिसे मुझे पूरे प्रोजेक्ट में गुणों को सजाने के लिए उपयोग करना होगा। – Ellesedil

+6

यह स्वीकार्य उत्तर होना चाहिए, धन्यवाद आदमी! –

+1

इसकी तलाश में था लेकिन काम नहीं करता [enums के साथ] (http://stackoverflow.com/q/28094024/465942) दुर्भाग्य से .. –

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