.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 : IStatepublic class CollectionImpl<State> : ICollection<IEntity<State>, State>
where State : IStateIEventDispatcher<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
{
}
}