2009-08-17 17 views
9

मैं nitpicking रहा हूँ, मुझे पता है। लेकिन जब एक संरचना पर आईकोनवर्टेबल इंटरफ़ेस को कार्यान्वित करते हैं जिसमें केवल एक बूलियन मान होता है (और इस प्रकार केवल दो राज्य होते हैं) IConvertible.GetTypeCode() से वापस आने के लिए अनुशंसित मूल्य क्या है? संरचना पूरी तरह से परिवर्तनीय और बूलियन के तुलनीय है और स्ट्रिंग और एक्सएमएल प्रतिनिधित्व के अलावा लगभग हर पहलू में, यह प्रभावी रूप से एक बूलियन है।कार्यान्वयन IConvertible.GetTypeCode

मुझे लगता है कि मैं ढांचे के लिए झूठ बोल रहा हूँ अगर मैं TypeCode.Boolean लौट लेकिन TypeCode.Object अनावश्यक रूप से अस्पष्ट लगता है। क्या इस पद्धति को अपने स्वयं के ढांचे में लागू करने के लिए कोई वास्तविक दुनिया के परिणाम हैं?

IConvertible.GetTypeCode on MSDN

उत्तर

3

आप यह कर सकते हैं - लेकिन सावधान रहना।

कई दिनचर्या सीधे GetTypeCode का उपयोग करते हैं, और इसका प्रभाव हो सकता है यदि आपकी संरचना उनमें से किसी एक को पास की जाती है। यदि आप TypeCode.Boolean को वापस करने के लिए GetTypeCode को ओवरराइड करते हैं, तो ये दिनचर्या मान लेंगे कि आपकी संरचना एक बूल है, जो अजीब साइड इफेक्ट्स हो सकती है या नहीं।

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

+2

धन्यवाद, मैंने बाद में रिफ्लेक्टर भी चेक किया है और कुछ निम्न-स्तरीय विधियों को पाया है जो इसे सिस्टम.Variant.MarshalHelperConvertObjectToVariant जैसे एक्सेस करते हैं। मुझे लगता है कि नीचे की रेखा यह है कि मेरे लिए एक बूलियन के रूप में विज्ञापन करने का कोई कारण नहीं है, इसलिए कार्रवाई का सबसे अच्छा तरीका टाइपकोड को वापस करने के लिए प्रतीत होता है। ऑब्जेक्ट। – Josh

+0

यही वही है जो मैं अनुशंसा करता हूं, जब तक आपके पास ऐसा करने का कोई मजबूत कारण न हो। इसे बुलीयन में स्थापित करने से अनपेक्षित परिणाम हो सकते हैं। –

1

TypeCode.Boolean के लिए यह प्रतिनिधित्व करता वर्णन के आधार पर "सही या गलत का बूलियन मूल्यों का प्रतिनिधित्व एक साधारण प्रकार।" ऐसा लगता है जैसे यह आपकी संरचना के विवरण के साथ फिट बैठता है क्योंकि आपने कहा था कि इसमें केवल एक बूलियन मान है और यह उनके बीच स्पष्ट रूप से परिवर्तनीय है।

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