अब मेरा उद्देश्य एक जोड़ी को मूल प्रकार और एक प्रकार की परिभाषा (आवश्यकता ए) के साथ रखना था। प्रकार की परिभाषा के लिए मैं विरासत (आवश्यकता बी) का उपयोग करना चाहता हूं। मूल प्रकार (आवश्यकता सी) पर स्पष्ट ज्ञान के बिना उपयोग संभव होना चाहिए।
ठीक आइए introducte Get2:
class ServiceGate
{
public IAccess<C, T> Get1<C, T>(C control) where C : ISignatur<T>
{
throw new NotImplementedException();
}
public IAccess<ISignatur<T>, T> Get2<T>(ISignatur<T> control)
{
throw new NotImplementedException();
}
}
class Test
{
static void Main()
{
ServiceGate service = new ServiceGate();
//var bla1 = service.Get1(new Signatur()); // CS0411
var bla = service.Get2(new Signatur()); // Works
}
}
ठीक है, लेकिन इस समाधान पहुँच
बाद मैं अब जानते हैं कि gernic की कमी सामान्य वापसी प्रकार को सुलझाने के लिए इस्तेमाल नहीं कर रहे हैं, मैं एक छोटा सा प्रयोग requriement नहीं बी
अगला कोशिश:
class ServiceGate
{
public IAccess<C, T> Get3<C, T>(C control, ISignatur<T> iControl) where C : ISignatur<T>
{
throw new NotImplementedException();
}
}
class Test
{
static void Main()
{
ServiceGate service = new ServiceGate();
//var bla1 = service.Get1(new Signatur()); // CS0411
var bla = service.Get2(new Signatur()); // Works
var c = new Signatur();
var bla3 = service.Get3(c, c); // Works!!
}
}
अच्छा! अब संकलक जेनेरिक रिटर्न प्रकारों का अनुमान लगा सकता है। लेकिन मुझे यह पसंद नहीं है। अन्य कोशिश:
class IC<A, B>
{
public IC(A a, B b)
{
Value1 = a;
Value2 = b;
}
public A Value1 { get; set; }
public B Value2 { get; set; }
}
class Signatur : ISignatur<bool>
{
public string Test { get; set; }
public IC<Signatur, ISignatur<bool>> Get()
{
return new IC<Signatur, ISignatur<bool>>(this, this);
}
}
class ServiceGate
{
public IAccess<C, T> Get4<C, T>(IC<C, ISignatur<T>> control) where C : ISignatur<T>
{
throw new NotImplementedException();
}
}
class Test
{
static void Main()
{
ServiceGate service = new ServiceGate();
//var bla1 = service.Get1(new Signatur()); // CS0411
var bla = service.Get2(new Signatur()); // Works
var c = new Signatur();
var bla3 = service.Get3(c, c); // Works!!
var bla4 = service.Get4((new Signatur()).Get()); // Better...
}
}
मेरे अंतिम समाधान ISignature<B, C>
, जहां बी आधार प्रकार और सी परिभाषा ... IST
शायद त्रुटि आप प्राप्त जोड़ने ... – vulkanino
एरिक Lippert के जवाब की तरह कुछ है करने के लिए है यहां, उनके ब्लॉग पोस्ट के साथ वह लिंक करता है, क्यों एक बहुत अच्छा स्पष्टीकरण है। असल में, अगर मैं सही ढंग से याद करता हूं, तो संकलक जेनेरिक बाधाओं का उपयोग करके प्रकारों का अनुमान नहीं लगाएगा।http://stackoverflow.com/questions/3630153/generic-extension-method-type-argument-cannot-be-inferred-from-the-usage/3630202#3630202 –