अद्यतन: निम्न कोड केवल सी # 4.0 (दृश्य स्टूडियो 2010)सहप्रसरण/contravariance: कैसे निम्नलिखित कोड बनाने के लिए संकलन
में समझ ऐसा लगता है जैसे मैं सहप्रसरण से कुछ गलतफहमी हो रहा है बनाता है/contravariance बात । क्या कोई मुझे बता सकता है कि निम्न कोड संकलित क्यों नहीं करता है?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
यह एक संकलित करते हुए: (!!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
@Adam: मेरा मानना है कि आप गलत हैं, 'IEnumerable' 'नहीं IEnumerable ' डिफ़ॉल्ट तो यह '3.5' –
sll
में भी @AdamMihalcin संकलन नहीं होता कर रहा है: नहीं, यह कोड * नहीं होता * .NET 4 से पहले संकलित किया है। मैंने इसे सत्यापित करने के लिए अभी कोशिश की है। सामान्य आविष्कार के बिना, 'IENumerable' से 'IENumerable 'का रूपांतरण केवल अमान्य है। –
टीएसपर पर अच्छी कॉल, बस तय किया गया है कि –