2010-01-11 7 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) { } 
    } 
} 

Odpowiedz

9

Jest to linia wykraczająca:

class C<out T> 

jako komunikat o błędzie informuje, że nie można zastosować ogólną wariancję do klas, a jedynie do interfejsów delegaci. To byłoby w porządku:

interface C<out T> 

Powyższe nie jest.

Szczegółowe informacje Creating Variant Generic Interfaces

+0

Link jest uszkodzony. – recursive

+0

Naprawiłem link. –

4

Próbujesz zastosować ogólną wariancję do klasy. To nie jest obsługiwane. Jest obsługiwany tylko w przypadku interfejsów i typów delegowanych.

Nielegalny:

class C<out T> { } 

prawna:

interface C<out T> {} 
Powiązane problemy