.NET 2.x Почему компилятор считает разными типами generic в предке и наследниках - C#

Узнай цену своей работы

Формулировка задачи:

Почему компилятор считает разными типами генериками хотя по факту они одинаковы, вот код. Собственно что я хочу сделать
Листинг программы
  1. TransactionStart.UnRelay(entity.TransactionStart);
Что пишет
Листинг программы
  1. Argument 1: cannot convert from
  2. 'IEventDispatcher<TransactionStatusChangeEvent<ITransactional<State>, State>>'
  3. to 'IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>>'
Окей, типы и правда разные.., или нет? Сам энтити расширяет ITransactional
Листинг программы
  1. public interface IEntity<S> : ITransactional<S>, ICloneable
  2. where S : IState
Класс в котором я это делаю
Листинг программы
  1. public class CollectionImpl<State> : ICollection<IEntity<State>, State>
  2. where State : IState
Тип транзакции в этом классе
Листинг программы
  1. IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>> TransactionStart
Тип энтити
Листинг программы
  1. List<IEntity<State>> _entities = new List<IEntity<State>>();
При попытке приведения вылетает каст эксепшн
Листинг программы
  1. TransactionStart.UnRelay((IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>>)entity.TransactionStart);
Я не понимаю почему компилятор так странно на это реагирует

Решение задачи: «.NET 2.x Почему компилятор считает разными типами generic в предке и наследниках»

textual
Листинг программы
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             IList<IBeta> e = null;
  6.             Foo(e);//нет ошибки, хотя вместо IList<IAlpha> передается IList<IBeta>
  7.  
  8.             Console.ReadLine();
  9.         }
  10.  
  11.         static void Foo(IList<IAlpha> e)
  12.         {
  13.         }
  14.  
  15.         public interface IList<out T>//ковариантный интерфейс
  16.         {
  17.         }
  18.  
  19.         public interface IAlpha
  20.         {
  21.         }
  22.  
  23.         public interface IBeta : IAlpha
  24.         {
  25.         }
  26.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы