उदाहरणआईएस (टाइप चेक) को कम करने के लिए पॉलिमॉर्फिज्म + ओवरलोडिंग का उपयोग करके इस विधि को कैसे सुधारें?
BaseClass MyBase()
{
public int Add(BaseClass next)
{
if (this is InheritedA && next is InheritedA)
return 1;
else if (this is InheritedA && next is InheritedB)
return 2;
else if (this is InheritedB && next is InheritedA)
return 3;
else if (this is InheritedB && next is InheritedB)
return 4;
}
}
जहां InheritedA
के लिए, और InheritedB
अपनी विरासत में मिला वर्ग हैं। वास्तव में, वहाँ और अधिक पारंपरिक रूप से प्राप्त कक्षाएं हैं, और आदेश और उसके संकार्य के प्रकार के आधार Add
रिटर्न अलग परिणाम।
मैं पॉलिमॉर्फिज्म और ओवरलोडिंग का उपयोग करके इसे फिर से लिखने की सोच रहा हूं, हालांकि, यह जटिल हो जाता है, मुझे किसी भी प्रकार के प्रकार को हल करने के लिए एक सहायक विधि पेश करना है।
उदा।
InheritedA myA()
{
public override int Add(BaseClass next)
{
return next.AddTo(this);
}
}
अब मैं BaseClass
में AddTo
रखा, और साथ ही विरासत में मिला वर्ग में ओवरराइड कर दिया है।
InheritedA myA()
{
public override int AddTo(InheritedA next) { return 1; }
public override int AddTo(InheritedB next) { return 3; }
}
BaseClass myBase()
{
public abstract int Add(BaseClass next);
public abstract int AddTo(InheritedA next);
public abstract int AddTo(InheritedB next);
}
क्या ऐसा करने का कोई बेहतर तरीका है?
एक बार इनहेरिट सी कक्षा होने पर क्या होता है? आईई ए + सी = ए + बी करता है? – Sign
क्या प्रत्येक ऑपरेंड (लालसा और रावल) के लिए केवल दो मान हैं? – CAbbott
@CAbbott मैं इस प्रतिबंध का पालन करने के लिए अपनी कक्षा को संशोधित कर सकता हूं, इसलिए हाँ केवल दो मान – colinfang