मेरे पास कुछ कोड है जिसका मेरा कोई नियंत्रण नहीं है। एक कस्टम वर्ग MyClass
(KnownType से प्राप्त नहीं) के रूप में पारित किया जा सकता है कि डिजाइन करने के लिए सी # मेंसी # कास्ट ऑपरेटर के माध्यम से गतिशील रूपांतरण
KnownType item = (KnownType) parameter;
क्या यह संभव है: यह कोड एक वस्तु पैरामीटर स्वीकार करता है और एक प्रकार इस तरह संकलन समय पर जाना जाता है के लिए यह कास्ट करने के लिए प्रयास करता है उपरोक्त कोड और इसके बाद के संस्करण कोड से KnownType
में बदला जाने वाला पैरामीटर है, बशर्ते कि MyClass
अपने सदस्य पद्धति का उपयोग करके KnownType
को ही परिवर्तित कर सकते हैं:
protected KnownType ConvertToKnownType()
{
// conversion code goes here
}
मैं इस तरह एक कस्टम रूपांतरण ऑपरेटर को लागू करने की कोशिश की है:
public static implicit operator KnownType(MyClass source)
{
KnownType result;
// conversion goes here
return result;
}
लेकिन यह काम नहीं किया (इसका उपयोग नहीं किया गया था)। क्या मुझे लगता है कि कास्ट ऑपरेटर केवल तभी काम करता है जब स्रोत प्रकार, लक्ष्य प्रकार और रूपांतरण ऑपरेटर संकलन समय पर ज्ञात हैं?
संपादित करें: मैंने शुरुआत में रूपांतरण करने वाले कोड के बारे में अधिक जानकारी प्रदान नहीं की क्योंकि मुझे लगता है कि यह अप्रासंगिक है और क्योंकि मुख्य रूप से कास्ट ऑपरेटर लागू करने के तरीके में दिलचस्पी है, यानी यह रनटाइम को देखता है उपयुक्त कनवर्टर खोजने के लिए टाइप करें या संकलन समय पर निर्णय लिया गया है?
चीजों को साफ करने के लिए, KnownType
, वास्तव DataRowView
में है, जबकि MyClass
कुछ अन्य प्रकार से निकाले जाते हैं नहीं है DataRowView
के लिए एक आवरण वर्ग है। MyClass
DataRowView
का संदर्भ रखता है। ComboBox.DataSource
को DataView
पर बाध्य करने के बजाय, मैं इसे IList<MyClass>
पर बांधता हूं लेकिन मुझे की आवश्यकता है ताकि DataRowView
कॉलम मानों तक पहुंचने में सक्षम हो जैसे कि मैं IList<DataRowView>
बाध्यकारी था। दुर्भाग्यवश कास्ट ऑपरेटर जिस तरह से डरता था, वह काम करता है: यह केवल रूपांतरण करने के लिए समयबद्ध जानकारी संकलित करता है (हालांकि यह समान विरासत के पेड़ में प्रकारों के बीच कास्टिंग करते समय रनटाइम प्रकार की जानकारी का उपयोग करता है)।
आप एक ऐसे फ़ंक्शन के साथ 'मायटाइप' क्यों नहीं बनाते हैं जो 'माईटाइप' उदाहरण के गुणों के आधार पर निर्मित 'ज्ञात टाइप' का उदाहरण देता है? आप फिर 'ज्ञात टाइप' की अपेक्षा करने वाले फ़ंक्शन में 'myType.ToKnownType()' को पास कर सकते हैं। – xxbbcc
@xxbbcc उन्होंने कहा कि उनके पास रूपांतरण करने वाले वर्ग पर नियंत्रण नहीं है। – Servy
यह इस बात पर निर्भर करता है कि आपके द्वारा पारित ऑब्जेक्ट को जांचने के लिए कोड क्या कर रहा है। यह स्पष्ट रूप से जांच कर सकता है कि ऑब्जेक्ट सटीक प्रकार है, और यहां तक कि कोई भी जो विरासत में नहीं है। – DavidG