मुझे सी # में जेनेरिक पसंद है, लेकिन कभी-कभी उनके साथ काम करना थोड़ा जटिल हो सकता है। नीचे की समस्या मैं अब और फिर हर समय दौड़ता हूं। क्या इस परिदृश्य को सरल बनाने का कोई तरीका है? मैं कैसे नहीं देख सकते हैं, लेकिन मैं आशा करती हूं कि किसी कोक्या सी # में नेस्टेड जेनरिक को सरल बनाना संभव है?
कर सकते हैं :) तीन आधार वर्ग को देखते हुए:
public abstract class Inner
{
}
public abstract class Outer<T>
where T : Inner
{
}
public abstract class Handler<TOuter, TInner>
where TOuter : Outer<TInner>
where TInner : Inner
{
public abstract void SetValue(TInner value);
}
और कुछ सरल कार्यान्वयन:
public class In : Inner
{
}
public class Out : Outer<In>
{
}
public class HandleOut : Handler<Out, In>
{
public override void SetValue(In value) { }
}
अब मेरी सवाल यह है: के लिए HandleOut
, TInner
का प्रकार "आउट" प्रकार से दिया गया है, इसलिए HandleOut
की परिभाषा को public class HandleOut : Handler<Out>
जैसी परिभाषा को सरल बनाने का कोई तरीका है और अभी भीपर पैरामीटर के रूप में आंतरिक प्रकार का उपयोग करने में सक्षम होना है?
यह एक बहुत ही सरल उदाहरण है, लेकिन मुझे कभी-कभी परिभाषाओं में जेनेरिक प्रकारों की एक लंबी सूची मिलती है, जब आमतौर पर उन सभी को तर्कसंगत रूप से पहले प्रकार से घटाया जा सकता है। क्या कोई ऐसी चीज है जो मुझे याद आ रही है?
मैंने आपके कोड को ठीक किया ताकि यह संकलित हो। क्या आप यह देखने के लिए जांच सकते हैं कि यह आपके प्रश्न के पीओवी से सही है या नहीं? – Enigmativity
जबकि मुझे लगता है कि आप जो सोच रहे हैं उसके साथ 100% गठबंधन नहीं है, तो आप एरिक लिपर्ट द्वारा एक ब्लॉग पोस्ट पढ़ना चाहेंगे [जेनेरिक बाधाएं विरासत में क्यों नहीं हैं] (http://ericlippert.com/2013/07/15/ क्यों-जेनेरिक-बाधाएं-विरासत में नहीं मिलीं /) (और, वास्तव में, तथ्य यह है कि वे विरासत में नहीं हैं इसलिए क्यों * निष्क्रियता को आपके कोड को * अधिक * बाधाओं को जोड़ने के लिए ठीक करना पड़ा) –
धन्यवाद, @Enigmativity। मैंने बस फ्लाई पर कोड लिखा - आपके परिवर्तन बिल्कुल मेरे विचारों के अनुसार हैं :) –