मुझे यकीन नहीं है कि मैं यहां क्या कर रहा हूं। मैं एक सामान्य वर्ग है, जो मूल रूप से एक महिमा पूर्णांक है, कुछ स्ट्रिंग प्रारूपण के लिए कुछ तरीकों के साथ, साथ ही साथ में/स्ट्रिंग से है और रूपांतरण int:सी # में विरासत/स्पष्ट रूपांतरण विधियां विरासत में मिली हैं?
public class Base
{
protected int m_value;
...
// From int
public static implicit operator Base(int Value)
{
return new Base(Value);
}
...
// To string
public static explicit operator string(Base Value)
{
return String.Format("${0:X6}", (int)Value);
}
}
और यह ठीक काम करता है। मैं सफलतापूर्वक निहित और स्पष्ट रूपांतरण का उपयोग कर सकते हैं:
Base b = 1;
Console.WriteLine((string)b); // Outputs "$000001", as expected.
तब मैं इस वर्ग से निकाले जाते हैं, अलग बच्चे कक्षाएं, जो m_value में/बंद अलग नाम दिया बिट्स को चालू करें। उदाहरण के लिए:
public class Derived : Base
{
}
और फिर मैं उपयोग नहीं कर सकते मेरी निहित करने के लिए/रूपांतरण पूर्णांक से:
Derived d = (int)3;
अंतर्निहित/स्पष्ट रूपांतरण कर रहे हैं:
Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
यहां तक कि इस एक ही त्रुटि देता है व्युत्पन्न कक्षा में विरासत में नहीं मिला? यदि नहीं, तो इसके लिए बहुत सी कोड कॉपी करने की आवश्यकता होगी।
RESPONSE त्वरित प्रतिक्रियाओं के लिए बहुत बहुत धन्यवाद! आप सभी 'उत्तर' चेकमार्क के लायक हैं, वे सभी बहुत अच्छे जवाब हैं। कुंजी बराबर चिह्न के दोनों किनारों के प्रकारों के बारे में सोचना है। अब जब मैं इसके बारे में सोचता हूं, तो यह सही समझ में आता है।
मुझे स्पष्ट रूप से केवल "व्युत्पन्न" रूपांतरणों को फिर से लिखना होगा। "Int32, स्ट्रिंग, आदि" रूपांतरण अभी भी लागू होते हैं।
कैसे यह सब काम करता है, तो आप इस विषय पर मेरे लेख पढ़ने के लिए चाहते हो सकता है की बारीकियों से कुछ के बारे में अधिक जानकारी के लिए: http://blogs.msdn.com/ericlippert/archive/2007/04/16 /chained-user-defined-explicit-conversions-in-c.aspx –