.NET 2.x Почему компилятор считает разными типами generic в предке и наследниках - C#
Формулировка задачи:
Почему компилятор считает разными типами генериками хотя по факту они одинаковы, вот код.
Собственно что я хочу сделать
Что пишет
Окей, типы и правда разные.., или нет?
Сам энтити расширяет ITransactional
Класс в котором я это делаю
Тип транзакции в этом классе
Тип энтити
При попытке приведения вылетает каст эксепшн
Я не понимаю почему компилятор так странно на это реагирует
TransactionStart.UnRelay(entity.TransactionStart);
Argument 1: cannot convert from 'IEventDispatcher<TransactionStatusChangeEvent<ITransactional<State>, State>>' to 'IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>>'
public interface IEntity<S> : ITransactional<S>, ICloneable where S : IState
public class CollectionImpl<State> : ICollection<IEntity<State>, State> where State : IState
IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>> TransactionStart
List<IEntity<State>> _entities = new List<IEntity<State>>();
TransactionStart.UnRelay((IEventDispatcher<TransactionStatusChangeEvent<IEntity<State>, State>>)entity.TransactionStart);
Решение задачи: «.NET 2.x Почему компилятор считает разными типами generic в предке и наследниках»
textual
Листинг программы
class Program { static void Main(string[] args) { IList<IBeta> e = null; Foo(e);//нет ошибки, хотя вместо IList<IAlpha> передается IList<IBeta> Console.ReadLine(); } static void Foo(IList<IAlpha> e) { } public interface IList<out T>//ковариантный интерфейс { } public interface IAlpha { } public interface IBeta : IAlpha { } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д