अगर मैं एक सामान्य मद वर्ग है कि इस तरह दिखता है:सी # जेनरिक: सरल बनाएँ प्रकार हस्ताक्षर
abstract class Item<T>
{
}
और आइटम के एक कंटेनर है कि इस तरह दिखता है:
class Container<TItem, T>
where TItem : Item<T>
{
}
के बाद से TItem टी पर निर्भर करता है , क्या कंटेनर के प्रकार हस्ताक्षर को सरल बनाना संभव है ताकि इसमें केवल एक प्रकार का पैरामीटर लगे?
class Container<TItem>
where TItem : Item // this doesn't actually work, because Item takes a type parameter
{
}
तो मैं यह दृष्टांत कर सकते हैं इस प्रकार है::
class StringItem : Item<string>
{
}
var good = new Container<StringItem>();
var bad = new Container<StringItem, string>();
संकलक निकालना कि टी स्ट्रिंग है जब TItem StringItem है में सक्षम है, है ना होना चाहिए कुछ इस क्या मैं सच में चाहते है? मैं यह कैसे करूं?
वांछित उपयोग:
class MyItem : Item<string>
{
}
Container<MyItem> container = GetContainer();
MyItem item = container.GetItem(0);
item.MyMethod();
मुझे लगता है कि आप कर सकते हैं। इसका बहुरूपता। आप अमूर्त तरीकों को ओवरराइड कर सकते हैं। –
उस स्थिति में आप स्ट्रिंगकॉन्टेनर क्लास को क्लास स्ट्रिंगकॉन्टेनर के रूप में बना सकते हैं जहां टीआईटीएम: आइटम –
RockWorld
मुझे विश्वास नहीं है कि कंपाइलर _partially_ सामान्य प्रकार का अनुमान लगा सकता है। –