के साथ इंटरफ़ेस का जेनेरिक कार्यान्वयन मेरे पास एक दिलचस्प स्थिति है जहां मैं एक इंटरफ़ेस को लागू करने के लिए एक प्रकार पैरामीटर का उपयोग करने वाली बेस क्लास का उपयोग करना चाहता हूं और चीजों को विरासत कक्षाओं के साथ भी रखना चाहता हूं।निर्दिष्ट प्रकार
public interface ICalculator
{
void Process(ICalculationModel calculationModel);
}
public abstract class CalculatorBase<T> :ICalculator where T : ICalculationModel
{
// Compiler moans that Process(ICalculationModel calculationModel) isn't implemented
public abstract void Process(T calculationModel);
}
public class PipeworkInspections : CalculatorBase<GasSafetyModel>
{
public override void Process(GasSafetyModel documentModel){
//snip
}
}
क्या मुझे कुछ सामान्य 'कहां' खंड या कुछ के साथ याद आ रही है? मेरे सिर में यह काम करना चाहिए। या क्या कंपाइलर को इंटरफ़ेस परिभाषा के समान ही कार्यान्वयन की आवश्यकता है?
मैं आसानी से टाइप पैरामीटर को आईसील्यूलेटर में नहीं ले जा सकता क्योंकि वहां बहुत से स्थान हैं जिनका उपयोग सामान्य के लिए बिना किसी आवश्यकता के किया जाता है।
यह चीजों को साफ़ कर दिया गया है। जानकारी के लिए धन्यवाद। अब स्पष्ट रूप से एक समाधान इंटरफेस को प्रकार पैरामीटर लेना है। हालांकि आईसील्यूलेटर का उपयोग कई स्थानों पर किया जाता है और संदर्भित किया जाता है जैसे कि ICalculator
अब मुझे कंपाइलर त्रुटियां मिलती हैं यदि मैं इंटरफेस में टाइप पैरामीटर को छोड़ देता हूं जो आईसीक्यूल्यूलेटर का संदर्भ देता है ... क्या ऐसा करने के लिए आर्किटेक्ट करने का कोई तरीका है जो काम करना चाहिए !?
मेरा मानना है कि यह समान होना चाहिए कि यह 'आईक्यूल्यूलेटर' में कैसा दिखाई देता है। हालांकि, चूंकि मैं मुख्य रूप से जावा सामान करता हूं और सी # नहीं, मैं निश्चित रूप से यह नहीं कह सकता। – Powerlord
यह काम नहीं कर सकता क्योंकि आप तब 'आईसील्यूलेटर सी = नया पाइपवर्क इंस्पेक्शन() कर सकते हैं; सी। प्रोसेस (नया अन्य मॉडल()) 'जो सुरक्षित नहीं है। सबसे अच्छा आप कर सकते हैं 'ICalculator.Process' को लागू करना और फिर सामान्य कार्यान्वयन के अंदर डालना। – Lee