Почему я получаю следующую ошибку? Неверный модификатор дисперсии. В качестве варианта могут быть указаны только параметры интерфейса и типа делегата. - PullRequest
6 голосов
/ 11 января 2010
 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) { }
  }
}

Ответы [ 2 ]

10 голосов
/ 11 января 2010

Это оскорбительная строка:

class C<out T> 

Как говорится в сообщении об ошибке, вы не можете применять универсальную дисперсию к классам, только к интерфейсам и делегатам. Это было бы хорошо:

interface C<out T>

Выше нет.

Подробнее см. Создание вариантов универсальных интерфейсов

4 голосов
/ 11 января 2010

Вы пытаетесь применить общую дисперсию к классу. Это не поддерживается Поддерживается только в интерфейсах и типах делегатов.

Illegal:

class C<out T>  { }

Допустимо:

interface C<out T> {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...