2010-09-16 14 views
9

MSDN में के लिए कनवर्टर हो रही है कि मैं इस बारे में EnumConverter पढ़ा है:प्रकार

आप एक EnumConverter का एक उदाहरण बनाने कभी नहीं करना चाहिए। इसके बजाय, TypeDescriptor क्लास की GetConverter विधि को कॉल करें। अधिक जानकारी के लिए, TypeConverter बेस क्लास में उदाहरण देखें।

क्या कोई जानता है कि मेरे अपने लागू कन्वर्टर्स के लिए यह क्यों और सच है?

उदाहरण के लिए, मेरे पास कक्षा ग्रेडियंटकॉलर और कनवर्टर ग्रेडियंटकॉलर कनवर्टर है। मैं

new GradientColorConverter().ConvertFrom(colorString) 

या

TypeDescriptor.GetConverter(typeof(GradientColor)).ConvertFrom(colorString); 

वास्तव में यह दोनों तरीकों से काम करता लिखना चाहिए, लेकिन जो बेहतर है?

उत्तर

15

मुझे लगता है कि बाद में TypeDescriptor.GetConverter(typeof(GradientColor)) लगता है क्योंकि यह कोड कनवर्टर सिस्टम को जोड़ने या विस्तार करने की अनुमति देता है जब कोड एक अलग संदर्भ में चलाया जाता है (जैसे कस्टम नियंत्रण किसी अन्य एप्लिकेशन में अपने कस्टम टाइपकॉन्टर के साथ चलाया जाता है)।

+0

जैसा कि मुझे पता है, कक्षा विशेषता में निर्दिष्ट कनवर्टर प्रकार। यह अन्य एप्लिकेशन में अलग कैसे हो सकता है? –

+0

टाइपडिस्क्रिप्टर प्रकार सिस्टम (विशेषताओं, या डिफ़ॉल्ट प्रकार रूपांतरण) से पढ़ता है लेकिन फिर इसे रनटाइम पर अनुकूलन की अनुमति देने के लिए विस्तारित करता है। मैंने इसे कभी नहीं किया है, लेकिन यह दस्तावेज़ों में है। TypeDescriptionProvider पर एक नज़र डालें। यह आपके ऐप के बाद के संस्करण में आपके वर्गों को फिर से उपयोग करने में आसान बना देगा। – yzorg

2

उत्तरार्द्ध। यदि आप प्रकार कनवर्टर क्लास बदलते हैं तो कोड अभी भी काम करेगा। Decoupling अच्छा है।

+0

आप सही हैं, लेकिन इस मामले में प्रतिबिंब का उपयोग विशेषता से कनवर्टर प्रकार प्राप्त करने के लिए किया जाएगा। सुनिश्चित नहीं है कि यह अच्छा है, अगर मैं एक स्थिर प्रकार के रूप में कनवर्टर उदाहरण बना सकता हूं। –

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