8

वास्तविक दुनिया में आपने किस प्रकार की चीजें कस्टम .NET विशेषताओं का उपयोग किया है?कस्टम .NET विशेषताओं का वास्तविक विश्व उपयोग

मैंने उनके बारे में कई लेख पढ़े हैं, लेकिन मैंने कभी भी कस्टम विशेषताओं का उपयोग नहीं किया है।

मुझे लगता है कि जब वे उपयोगी हो सकते हैं तो मैं उन्हें देख सकता हूं।

मैं आपके द्वारा बनाई गई विशेषताओं के बारे में बात कर रहा हूं, जो पहले से ही ढांचे में शामिल नहीं हैं।

+2

यहां बताया गया है कि अन्य सॉफ्लोर्स उनका उपयोग कैसे करते हैं: http://www.google.com/#hl=hi&q=site%3Astackoverflow.com+.net+custom+attribute&aq=f&oq=&aqi=&fp=leBsIIJAIN0 – Sampson

उत्तर

4

मैंने उन्हें सत्यापन के लिए "कस्टम" विशेषताओं का उपयोग किया है (यानी मेरे क्षेत्र "क्रेडिट कार्ड सत्यापन" के साथ एक फ़ील्ड को चिह्नित करने के लिए चिह्नित किया गया है) और कस्टम लिंक्टोएल्यूसीन विश्लेषक जो मैंने लिखा है (यानी यह निर्दिष्ट करना कि किस विश्लेषक का उपयोग करना है एक दिया गया फ़ील्ड)।

सत्यापन कोड, उदाहरण के लिए, कुछ इस तरह दिखेगा:

public class Customer 
{ 
    [CreditCardValidator] 
    string creditCardNumber; 

    [AddressValidator] 
    string addressLineOne 
} 

जब ऊपर वस्तु मान्य है, प्रत्येक क्षेत्र "कस्टम" विशेषता के लिए उपयुक्त सत्यापनकर्ता धन्यवाद के साथ मान्य है।

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

0

मुझे कुछ ऑब्जेक्ट्स को एक कस्टम (विरासत) प्रारूप में क्रमबद्ध करना था, और मैंने यह पहचानने के लिए विशेषताओं का उपयोग किया कि किन फ़ील्ड को क्रमबद्ध किया जाना चाहिए और उन्हें कैसे प्रारूपित किया जाना चाहिए। तब मेरे पास एक धारावाहिक था जो इन गुणों के साथ किसी ऑब्जेक्ट को ले सकता था और इसे प्रारूपित करने के लिए प्रतिबिंब का उपयोग कर सकता था।

+0

आप ' वास्तव में अपने स्वयं के कस्टम विशेषताओं का उपयोग नहीं कर रहे थे, क्या आप थे? –

+0

heeeeeeeeeeeeeee – abmv

0

मैंने इसे ओआरएम ढांचे में से एक में उपयोग किया था जिसे मैंने ActiveRecord पैटर्न के आधार पर विकसित किया था। यह वही प्रकार का कार्यान्वयन है जो LINQ, Castle Project आदि में उपलब्ध है

ढांचे को "स्काईफ्रेमवर्क" कहा जाता था, लेकिन यह ओपनसोर्स नहीं था।

उदा। बस एक मोटा उदाहरण ...

आपको अन्य ओपनसोर्स परियोजनाओं में भी इसी तरह के उदाहरण मिलेंगे।

[Sky.Table ("user")] 
public class User 
{ 
    [Sky.Column ("username")] 
    public string UserName; 

    [Sky.Column ("pwd")] 
    public string Password; 
} 

नोट: विशेषता "तालिका", "कॉलम" कस्टम उस समय जिम्मेदार बताते थे।

ActiveRecord इंजन इन विशेषताओं के लिए वस्तु पार्स करके CRUD के लिए संबंधित कार्यों को उत्पन्न करता है ... आदि ...

इसी तरह, मैं विकसित की थी कोड बेंचमार्क किए जाने की जरूरत है कि के कुछ भागों की पहचान करने के लिए कुछ कस्टम जिम्मेदार बताते हैं। .. उदाहरण के लिए

[Sky.BenchMark()] 
public void LongRunningMethod(..) 
{ 
} 

उपर्युक्त विशेषताओं के साथ चिह्नित विधियां स्वचालित रूप से बेंच चिह्नित होती हैं और एक लॉग उत्पन्न होता है। ये कुछ पहले कार्यान्वयन थे।

विषय पर एक अप्रेस बुक उपलब्ध है .. Applied .NET Attribues जो आपकी मदद कर सकता है।

+0

क्या आपने गुण लिखा था? –

+0

तालिका, कॉलम, बेंचमार्क आदि विशेषता वर्ग से व्युत्पन्न वस्तुएं हैं। इसके अलावा पार्सर इंजन इसे संभालने का ख्याल रखता है। इन वस्तुओं को हमेशा कुछ कारखाने वर्ग द्वारा तत्काल किया जाता है, ताकि आप विधियों पर एक हुक प्राप्त कर सकें। –

+0

और कृपया LINQ के लिए समान विशेषता से भ्रमित न हों जो आपके पास है। यह कोड का एक पुराना बिट है जहां गुण अपने नामस्थान में झूठ बोल रहे थे। –

1

अन्य बातों के अलावा, मैं उन्हें का उपयोग किया है EBNF जो रन-टाइम में पढ़ा जाता है मक्खी पर कस्टम पारसर्स बनाने के लिए और यह भी एक डेटाबेस के लिए खेतों के बारे में मेटाडेटा निर्दिष्ट करने के लिए निर्दिष्ट करने के लिए।

मैं एक 'पैटर्न' लगता है मैं आमतौर पर कस्टम विशेषताओं का उपयोग कर रहा enums को बदलने के लिए, खासकर जब वहाँ कोड में diff स्थानों में enum पर निर्भरता है।

उदा। मेरे पास किसी ऑब्जेक्ट की स्थिति के लिए एक enum हो सकता है। इस स्थिति के आधार पर, मेरे पास कोड में 3 या 4 अलग-अलग स्थान हैं जो मैं उस enum का 'स्विच' करता हूं और कुछ ऑपरेशन करता हूं। कुछ अन्य डेवलपर आसानी से एक नया enum जोड़कर एक बग पेश कर सकते हैं लेकिन कोड में कहीं और स्विच कथन में से किसी एक में संभालने में सक्षम नहीं है।

तो यह मैं एक कस्टम विशेषताओं एक स्थिर वर्ग के लिए घोषित बनाने से बचने के लिए। कस्टम विशेषताओं को कक्षा के स्थिर कन्स्ट्रक्टर में एक शब्दकोश में लोड किया जाता है और कोड में सभी स्थान स्विच स्टेटमेंट के बजाय शब्दकोश का उपयोग करते हैं। कस्टम विशेषता कन्स्ट्रक्टर में प्रत्येक स्विच स्टेटमेंट के लिए 'हार्ड-कोडेड' मान होते हैं।

5

मैं एक स्क्रिप्टिंग इंजन बनाया है, और टैग किया [कमान] विशेषता के साथ विभिन्न तरीकों। इसका मतलब था कि इन कार्यों को स्क्रिप्टिंग इंजन के संपर्क में लाया गया था।

उदाहरण:

[Command(HelpText = "Lists active users")] 
void ListUsers(void) 
{ 

} 

[Command(HelpText = "Terminate a specific user's connection")] 
void EndConnection(int userID) 
{ 

} 

और के रूप में प्रयोग किया है:

MyScriptEngine>> Help 
Available Commands are: 
    ListUsers: Lists active users 
    EndConnection {userID}: Terminate a specific user's connection 

MyScriptEngine>> EndConnection 3 
    User 3 (Michael) has had his connection terminated. 

MyScriptEngine>> 
0

मैं वास्तव में कस्टम के लिए एक प्रयोग के रूप में अभी तक की विशेषताओं का मिल गया है। ऐसी कुछ स्थितियां रही हैं जहां मैंने यह साबित किया कि वे उचित हो सकते हैं लेकिन उनका उपयोग नहीं किया क्योंकि स्पष्ट रूप से कस्टम विशेषताओं को पढ़ने में शामिल प्रतिबिंब काफी महंगा है।

0

मैं रखा है कस्टम "प्लग-इन" DLLs के भीतर वर्गों पर जिम्मेदार बताते हैं। यह एक ढांचे को गतिशील रूप से उपलब्ध प्लग-इन खोजने की अनुमति देता है, मूल्यांकन करता है कि वे रुचि के हैं या नहीं, और फिर गतिशील रूप से रुचि के लोगों को लोड करते हैं।

हमारे डोमेन में, उदाहरण के एक परिवार के भीतर प्लग-इन जो मॉडल विशेष वाहनों है। एक वाहन परिवार के लिए एक प्लग-इन वास्तव में वाहन परिवार के भीतर कई वाहन मॉडल मॉडल कर सकता है (उदाहरण के लिए, "एमएक्स -6", "जांच")। यदि कोई आईडी या मॉडल नाम कस्टम एट्रिब्यूट एरे के रूप में शामिल किया गया है, तो हम किसी भी डीएलएल को तुरंत अनदेखा कर सकते हैं जिसमें कस्टम विशेषताएँ भी नहीं हैं, और फिर किसी भी ऐसे व्यक्ति को अनदेखा कर दें जो ब्याज के वाहन को मॉडल न करे।

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