为什么我会收到以下错误?方差修饰符无效.只能将接口和委托类型参数指定为变量

Fra*_*nin 6 c# generics c#-4.0

 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) { }
  }
}
Run Code Online (Sandbox Code Playgroud)

jas*_*son 10

这是违规行:

class C<out T> 
Run Code Online (Sandbox Code Playgroud)

正如错误消息所示,您不能将通用方差应用于类,只能应用于接口和委托.这没关系:

interface C<out T>
Run Code Online (Sandbox Code Playgroud)

以上不是.

有关详细信息,请参阅创建变体通用接口

  • “你不能将通用方差应用于类” - 但为什么呢? (4认同)

Jar*_*Par 5

您正在尝试将通用差异应用于类。这不受支持。它仅在接口和委托类型上受支持。

非法的:

class C<out T>  { }
Run Code Online (Sandbox Code Playgroud)

合法的:

interface C<out T> {}
Run Code Online (Sandbox Code Playgroud)