Why do I get the following error? Invalid variance modifier. Only interface and delegate type parameters can be specified as variant
using System;
开发者_StackOverflow中文版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) { }
}
}
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
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> {}
精彩评论