2010-01-11 12 views
5
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Variance 

{ 
    class A { } 

    class B : A { } 

    class C<out T> { } 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var v = new C<B>(); 

     CA(v); 
    } 

    static void CA(C<A> v) { } 
    } 
} 

cevap

9

Bu soruna neden olan satırı: sadece arayüzleri için, sınıflara jenerik varyans uygulayamaz,

class C<out T> 

hata mesajı anlatır gibi ve delegeler. Bu tamam olur:

interface C<out T> 

Yukarıda değil.

Ayrıntılar için

, Bir sınıfa jenerik varyans uygulamak çalışıyorsanız Creating Variant Generic Interfaces

+0

bağlantı bozuldu. – recursive

+0

Bağlantıyı çözdüm. –

4

görüyoruz. Bu desteklenmiyor. Yalnızca arayüzler ve delege türleri üzerinde desteklenir.

Yasadışı

:

class C<out T> { } 

Yasal:

interface C<out T> {} 
İlgili konular