यदि मेरे पास बेस क्लास और दो व्युत्पन्न कक्षाएं हैं, और मैं हाथ से दो व्युत्पन्न कक्षाओं के बीच कास्टिंग लागू करना चाहता हूं, तो क्या ऐसा करने का कोई तरीका है? (सी # में)ओवरराइडिंग (कास्ट)
abstract class AbsBase
{
private int A;
private int B;
private int C;
private int D;
}
class Imp_A : AbsBase
{
private List<int> E;
}
class Imp_B : AbsBase
{
private int lastE;
}
आम तौर पर मैं Imp_A से कास्टिंग हो जाएगा -> Imp_B और मैं चाहता हूँ ई सूची में अंतिम मूल्य 'कर सकते हैं पर' होने के लिए। इसके अलावा, क्या होगा यदि तीन या अधिक कार्यान्वयन कक्षाएं (जैसे वेतन, प्रति घंटा, सलाहकार, और पूर्व कर्मचारी।)
भले ही यह वास्तुशिल्प रूप से ध्वनि हो (मैं पूरे आवेदन का वर्णन नहीं कर सकता और संक्षेप में नहीं हो सकता) क्या यह संभव है?
मैं एक कनवर्टर लिखने जा रहा था, सिवाय इसके कि एक कनवर्टर आईपीबीआई कक्षा का एक नया ऑब्जेक्ट तैयार करेगा, जिसकी मुझे आवश्यकता नहीं है क्योंकि 'कर्मचारी' केवल किसी एक विकल्प में से एक होगा पहर। यदि आप एक IMPA "इलाज" के लिए
class Imp_B : Imp_A
{
private int A;
private int B;
private int C;
private int D;
private int lastE { get { return this.E.Last(); } }
}
आप वास्तव में ImpB से निकाले जाते हैं नहीं कर सकते, यह नामुमकिन है:
-Devin
ध्यान रखें कि यह (जाहिर है) वास्तव में एक पूरी नई Imp_B वस्तु बना देगा। – mquander
यह सही है। लेकिन, जैसा कि प्रबंधक का उल्लेख है, यह एक नई वस्तु है, जो मुझे विश्वास है कि यह अपरिहार्य है। लेकिन क्या इसका मतलब यह है कि "ए" जीसीडी नहीं होगा जब तक कि यह गुंजाइश से बाहर न हो जाए, भले ही मैं इसे कभी भी उपयोग न करें (एक Imp_A के रूप में)? – DevinB
हां, यह केवल तभी एकत्रित किया जाएगा जब यह दायरे से बाहर हो जाता है और अब आप इसके संदर्भ में कोई संदर्भ नहीं रखते हैं। –