के साथ व्युत्पन्न प्रकार को मूल सार वर्ग में नहीं डाला जा सकता है मेरे पास एक साधारण फैक्ट्री विधि है जो प्रदान किए गए सामान्य प्रकार पैरामीटर के आधार पर एक ठोस कार्यान्वयन उदाहरण प्रदान करती है। यदि कंक्रीट क्लास एक सामान्य अमूर्त बेस क्लास से एक प्रकार पैरामीटर के साथ प्राप्त होता है तो मैं उन्हें नहीं डाल सकता। संकलक मुझे Error 2 Cannot convert type 'Car' to 'VehicleBase<T>'
बताता है। यह ठीक काम करता है अगर मैं एक ही टाइप पैरामीटर के साथ एक इंटरफ़ेस के लिए अमूर्त कक्षा को प्रतिस्थापित करता हूं, या यदि मैं अमूर्त वर्ग से सामान्य प्रकार पैरामीटर को हटा देता हूं।टाइप पैरामीटर
interface IWheel
{
}
class CarWheel : IWheel
{
}
abstract class VehicleBase<T>
{
}
class Car : VehicleBase<CarWheel>
{
}
class VehicleFactory
{
public static VehicleBase<T> GetNew<T>()
{
if (typeof(T) == typeof(CarWheel))
{
return (VehicleBase<T>)new Car();
}
else
{
throw new NotSupportedException();
}
}
}
यह (VehicleBase<T>)new Car()
पर संकलित करने में विफल रहता है। क्या यह एक कंपाइलर दोष है, या यह अलग-अलग वर्गों और इंटरफेस को टाइप पैरामीटर के साथ अलग-अलग इलाज करने का एक जानबूझकर डिजाइन निर्णय हो सकता है?
समाधान के लिए मैं हमेशा अमूर्त वर्ग एक अंतरफलक को लागू करने और मेरी कारखाने विधि के लिए वापसी मान के रूप में उपयोग कर सकते हैं, लेकिन मैं अभी भी पता करने के लिए क्यों इस व्यवहार हो रहा है करना चाहते हैं।
यह वह समाधान है जिसका मैंने उपयोग किया था। इंटरफेस/प्रतिनिधियों में भिन्नता के बारे में मुझे याद दिलाने के लिए धन्यवाद - यह समझ में आता है और मेरे प्रश्न का उत्तर देता है। – dahvyd
मुझे याद दिलाने के लिए धन्यवाद। भूलना बहुत आसान है जब आपको दरवाजे से कुछ कोड प्राप्त करना होगा –