के साथ बाधाओं का उपयोग करना मान लीजिए कि हम परीक्षण के लिए एक सिस्टम लिखते हैं। परीक्षण में कार्यों की सूची होती है और प्रत्येक कार्य में प्रश्न और उत्तर की सूची होती है। साथ ही हम मानते हैं कि प्रश्न या उत्तर न केवल पाठ हो सकता है, बल्कि उदाहरण के लिए छवि हो सकती है। इसलिए हम जेनरिक का उपयोग करें:जेनेरिक इंटरफ़ेस या कक्षा
public interface IQuestion<T>
{
T Content { get; }
}
public interface IAnswer<T>
{
T Content { get; }
bool IsCorrect { get; }
}
और समस्या तब होती है जब हम टास्क बनाने:
interface ITask<TQuestion, TAnswer>
{
TQuestion Question { get; }
List<TAnswer> Answers { get; }
}
कैसे लिखने के लिए कि TQuestion
IQuestion
और TAnswer
की उप-प्रकार होना चाहिए - IAnswer
की उप-प्रकार?
मैं tryed है:
interface ITask<TQuestion, TAnswer>
where TQuestion : IQuestion<object>
where TAnswer : IAnswer<object>
लेकिन जब मैं बनाया:
class TextQuestion : IQuestion<string> {...}
class TextAnswer : IAnswer<string> {...}
यह काम नहीं किया:
class TextTask : ITask<TextQuestion, TextAnswer>
क्योंकि, वास्तव में, IQuestion<string>
नहीं है IQuestion<object>
से विरासत में मिला।
में जावा, मैं ITask
सामान्य प्रकार के प्रतिबंध में वाइल्डकार्ड का उपयोग होता है, Kotlin में, ऊपर दृष्टिकोण काम किया होता।
लेकिन सी # का उपयोग करके इसे कैसे हल करें?
दिलचस्प जवाब; जॉन स्कीट ने समझाया कि आपको स्पष्ट रूप से कहना है कि आप जेनिक्स में अपनी पुस्तक सी # गहराई में भिन्नता चाहते हैं (बीटीडब्ल्यू, यह एक पढ़ा जाना चाहिए)। संक्षेप में, निष्पादन समय पर टाइप मिस्चैच से बचने के लिए है। आप यह उत्तर भी देख सकते हैं: http://stackoverflow.com/a/246101/574059 और एरिक लिपर्ट द्वारा यह आलेख: https://blogs.msdn.microsoft.com/ericlippert/2007/10/16/covariance-and -contravariance-in-c-part-one/ – gobes
@gobes मुझे पीछे कारण के बारे में पता है।यह ओपी चाहता है कि वापस आ जाता है, उदाहरण के लिए इस मामले में भिन्नता का उपयोग तीसरे पैरामीटर (जावा के समान ही) के मुकाबले कम प्रतिबंधित होगा, कोडर का समाधान मध्य में कहीं है। और लिंक के लिए धन्यवाद। – Theraot
यही वह है! भिन्नता का उपयोग करके, मुझे वह मिला जो मैं शुरुआत में चाहता था: 'क्लास टेक्स्टटास्क: आईटास्क <टेक्स्ट क्वेस्टियन, टेक्स्टएन्सर> '। – Letfar