.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
- {
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д