public abstract class EntityBase { ... }
public interface IFoobar
{
void Foo<T>(int x)
where T : EntityBase, new();
}
public interface IFoobar<T>
where T : EntityBase, new()
{
void Foo(int x);
}
public class Foobar<T> : IFoobar, IFoobar<T>
where T : EntityBase, new()
{
public void Foo(int x) { ... }
void IFoobar.Foo<T>(int x) { Foo(x); }
}
मैं एक संकलक चेतावनी मिलती है के रूप में एक ही नाम है गारंटी है कि यू और टी समान हैं। जिस तरह से फूबर वर्ग लागू किया गया है, यह बहुत महत्वपूर्ण है कि वे वही हों।प्रकार पैरामीटर 'टी' बाहरी प्रकार से प्रकार पैरामीटर '...'
मैंने यह भी करने की कोशिश की: void IFoobar.Foo<U>(int x) where U : T { Foo(x); }
, हालांकि यह गारंटी नहीं देता है कि यू और टी बराबर हैं और यह इंटरफ़ेस पर परिभाषित होने के बाद से बाधा को फिर से परिभाषित करने की अनुमति नहीं देता है।
आप क्या करने का प्रयास कर रहे हैं? यदि कक्षा में निर्दिष्ट है तो आप टी को फिर से परिभाषित क्यों करते हैं? यदि आपको इसे परिभाषित करने की आवश्यकता है तो यह अलग होना चाहिए अन्यथा टी पहले ही कक्षा द्वारा निर्दिष्ट है। यदि आप इसे हल करना चाहते हैं, तो यदि आप कर सकते हैं तो इंटरफ़ेस पर टी डाल दें। जब मैंने खुद को डुप्लिकेटिंग प्रकार विनिर्देशों को पाया तो मैंने यही किया है। –