निम्नलिखित वर्ग पर विचार करें: where TBase : class
मैं भी पाबंदी लगा रखी TDerived
सामान्य:क्लास और विधि स्तर सामान्य प्रकार की कमी बातचीत
public class DerivedClassPool<TBase> where TBase : class
{
public TBase Get(Type componentType)
{
// Not important, but you get the idea
return Activator.CreateInstance(componentType) as TBase;
}
public TDerived SomeMethod<TDerived>() where TDerived : TBase
{
return Get(typeof(TBase)) as TDerived;
}
}
ध्यान दें कि मैं TBase
सामान्य वर्ग तर्क पर पाबंदी लगा रखी एक वर्ग होने के लिए विधि तर्क TBase
या उस से व्युत्पन्न कुछ: where TDerived : TBase
।
मैं as TDerived
लाइन पर कोई त्रुटि मिलती है:
प्रकार पैरामीटर 'TDerived' के साथ नहीं किया जा सकता ऑपरेटर 'के रूप में' यह एक वर्ग के प्रकार बाधा है और न ही एक 'क्लास' बाधा नहीं है क्योंकि
मैं समझता हूँ कि त्रुटि मैं बाधा class
जोड़ने की जरूरत को रोकने के लिए, तो मैं मिल चाहते हैं:
where TDerived : class, TBase
मुझे ऐसा क्यों करना है जब TBase
पहले से ही कक्षा होने के लिए बाध्य है और TDerived
TBase
या उससे व्युत्पन्न है?
http://stackoverflow.com/questions/8002148/c-sharp-generics-contraints-propagation देखें। एरिक इसे वहाँ देता है। –
@ जेसन, मुझे लगता है कि यह 'लेकिन' के साथ बेहतर पढ़ता है। – Joey
@ जॉय: पर्याप्त मेला। वाक्यों से नफरत है जब वाक्य 'लेकिन' के साथ शुरू होते हैं, भले ही वाक्य शुरू करने के लिए संयोजन का उपयोग इन दिनों सही माना जाता है। मैं अपने हाई स्कूल अंग्रेजी शिक्षक को दोषी ठहराता हूं। वह क्लासिक अंग्रेजी सम्मेलनों के लिए एक स्टिकर था। –