मेरे पास एक इंटरफ़ेस है, और दो कक्षाएं जो इंटरफ़ेस लागू करती हैं। कक्षाओं में सामान्य प्रकार होते हैं। मैं एक वर्ग के दूसरे भाग से क्लोन करना चाहता हूं।सी # जेनेरिक कॉपी कन्स्ट्रक्टर
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
मेरे पास एक फू है और बार पसंद है। बार में एक प्रतिलिपि बनाने वाला IFoo का पैरामीटर ले रहा है। मैं एक विस्तार विधि बनाया क्लोन लागू करने के लिए:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
विधि कॉलिंग प्रकार की आवश्यकता है:
someFoo.Clone<T> ...
वहाँ जब विस्तार विधि को संशोधित करके विधि बुला प्रकार की घोषणा न करने का एक रास्ता है , या किसी अन्य तरीके से, उदाहरण को इसके अंतर्निहित प्रकार की देखभाल किए बिना बस पारित करने की अनुमति देने के लिए?
अद्यतन यहां बताया गया है कि स्थिति का बेहतर वर्णन करने के लिए इसका उपयोग कैसे किया जा रहा है।
एक विधि में मैं एक संग्रह को पुन: सक्रिय करता हूं और IFoo की गणना वापस करता हूं। विधि में मैं स्रोत संग्रह की विशेषता को देखता हूं और फू के प्रकार का निर्धारण करता हूं।
IFoo foo = null;
string type = element.Attribute("Type").Value;
switch (type)
{
case "int":
foo = new Foo<int>();
break;
case "string":
foo = new Foo<string>();
break;
// etc
}
// other stuff
yield return foo;
कॉलिंग विधि की एक सूची है। बाद में मैं इस सूची से अलग-अलग वस्तुओं का उपयोग करने के लिए चुनता हूं, जिस बिंदु पर मुझे एक फू के बजाय बार पसंद है। सूची से चयन करते समय उदाहरण IFoo प्रकार के होते हैं, क्योंकि इन्हें केवल "इस IFoo foo" के लिए एक्सटेंशन विधियां दिखाई देती हैं। मैं इफू को एक फू में नहीं डालना चाहता, जिसके लिए टी के प्रकार को फिर से घोषित करने की आवश्यकता होगी। मैं सिर्फ फू को यह बताना चाहता हूं कि यह क्या है। क्या यह संभव है?
शायद मुझे कुछ याद आ रही है, लेकिन यदि यो यू एक्सटेंशन फ़ंक्शन एक आईफू लेता है, अगर इसे फू टाइप करने के लिए इसे बार में "क्लोन" करना कैसा लगता है? –
मुझे केवल इस बात की परवाह है कि आईएफयू गुणों में मूल्यों को फू से बार में कॉपी किया जा रहा है। – blu