2010-10-03 11 views
5

Convert कक्षा .NET 1.0 के बाद से अस्तित्व में है। इस समय से IConvertible इंटरफ़ेस भी मौजूद है।कनवर्ट क्यों करता है। चेंजटाइप ऑब्जेक्ट पैरामीटर लेता है?

Convert.ChangeType विधि प्रकार है कि IConvertible लागू (वास्तव में, जब तक कि मैं गलत कर रहा हूँ, सभी Convert वर्ग द्वारा प्रदान की रूपांतरण तरीकों में से इस तरह से कर रहे हैं) की वस्तुओं पर केवल काम करता है। तो पैरामीटर प्रकार object क्यों है?

दूसरे शब्दों में, बजाय इस की:

public object ChangeType(object value, Type conversionType); 

क्यों हस्ताक्षर यह नहीं है?

public object ChangeType(IConvertible value, Type conversionType); 

बस मुझे अजीब लगता है।

उत्तर

5

परावर्तक में देख रहे हैं आप ChangeType(object, Type, IFormatProvider) के शीर्ष है, जो कवर के तहत कहा जाता है देख सकते हैं:

public static object ChangeType(object value, Type conversionType, IFormatProvider provider) 
{ 
    //a few null checks... 
    IConvertible convertible = value as IConvertible; 
    if (convertible == null) 
    { 
    if (value.GetType() != conversionType) 
    { 
     throw new InvalidCastException(Environment.GetResourceString("InvalidCast_IConvertible")); 
    } 
    return value; 
    } 

तो यह एक प्रकार का एक उद्देश्य यह है कि को लागू नहीं करता है की तरह लग रहा IConvertible लेकिन पहले से ही गंतव्य प्रकार केवल मूल वस्तु को वापस कर देगा।

दी ऐसा लगता है कि इस IConvertible लागू करने के लिए की आवश्यकता होगी, मूल्य के लिए केवल अपवाद नहीं है, लेकिन यह एक अपवाद है, और कारण की तरह लग रहा पैरामीटर object बजाय है।


यहाँ इस मामले के लिए एक त्वरित LINQPad परीक्षण है:

void Main() 
{ 
    var t = new Test(); 
    var u = Convert.ChangeType(t, typeof(Test)); 
    (u is IConvertible).Dump(); //false, for demonstration only 
    u.Dump();      //dump of a value Test object 
} 

public class Test { 
    public string Bob; 
} 
+0

मुझे लगता है कि यह केवल संभावित व्याख्या होने लगते करता है ... यह आप के लिए अजीब लग रहे हैं नहीं है, हालांकि, कि डिजाइनरों व्यवहार पर विचार किया होगा "एक वस्तु ले सकते हैं और इसे एक ही प्रकार में परिवर्तित कर सकते हैं" समर्थन के लायक भी? मेरा मतलब है, इसका कभी भी क्या उपयोग किया जाएगा? –

+0

@Dan - मुझे लगता है कि ऑब्जेक्ट डेटासेटर्स आंतरिक रूप से आईआईआरसी का उपयोग करता है, मुझे लगता है कि उन्होंने एक के बजाय चेक को प्राथमिकता दी है? मैं मानता हूं कि यह बहुत उपयोगी प्रतीत नहीं होता है। –

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