मैं सिर्फ यह पुष्टि करना चाहता हूं कि जेनिक्स में सी # के बारे में मुझे क्या समझा है। यह दो कोड बेस में आया है जिसमें मैंने काम किया है जहां एक सामान्य बेस क्लास का उपयोग टाइप-सुरक्षित व्युत्पन्न उदाहरण बनाने के लिए किया जाता है। मैं क्या,सी # जेनेरिक और बहुरूपता: एक ऑक्सीमोरोन?
public class SomeClass<T>
{
public virtual void SomeMethod(){ }
}
public class DeriveFrom :SomeClass<string>
{
public override void SomeMethod()
{
base.SomeMethod();
}
}
बात कर रहा हूँ का एक बहुत ही सरल उदाहरण समस्या आ जाती है जब मैं तो एक बहुरूपी तरह से व्युत्पन्न उदाहरणों का उपयोग करना चाहते।
public class ClientCode
{
public void DoSomethingClienty()
{
Factory factory = new Factory();
//Doesn't compile because SomeClass needs a type parameter!
SomeClass someInstance = factory.Create();
someInstance.SomeMethod();
}
}
ऐसा लगता है कि एक बार आप एक वंशानुगत पदानुक्रम या इंटरफ़ेस में एक सामान्य परिचय, आप अब कक्षाओं की है कि परिवार एक बहुरूपी तरह से शायद ही आंतरिक छोड़कर उपयोग कर सकते हैं। क्या यह सच है?
मुझे लगता है कि SomeClass DeriveFrom का बेस क्लास है, न कि कुछ क्लास, जो आपको लगता है कि यह होना चाहिए। –
Thanatos