tags:

views:

188

answers:

2
 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) { }
  }
}
+4  A: 

This is the offending line:

class C<out T> 

As the error message tells you, you can't apply generic variance to classes, only to interfaces and delegates. This would be okay:

interface C<out T>

The above is not.

For details, see Creating Variant Generic Interfaces

Jason
+4  A: 

You're attempting to apply generic variance to a class. This is not supported. It is only supported on interfaces and delegate types.

Illegal:

class C<out T>  { }

Legal:

interface C<out T> {}
JaredPar