У меня есть набор классов и интерфейсов, которые имеют относительно простую иерархию, однако наличие вещей наследуется, а затем наличие переменной, которая принимает базовый класс, не работает должным образом. Я думаю, проблема в том, что мои динамические типы ДОЛЖНЫ быть where : class
, а не where : IEntity
, потому что эти типы используются в функциях, которые я не могу изменить.
public interface IB<X, Y>
where X : class, IEntity
where Y : class, IEntity
{
...
}
public abstract class A
{
...
}
public abstract class B<X, Y> : A, IB<X, Y>
where X : class, IEntity
where Y : class, IEntity
{
...
}
public interface IEntity
{
...
}
public class Entity1 : IEntity
{
...
}
public class Entity2 : IEntity
{
...
}
public class C : B<Entity1, Entity2>, IB<Entity1, Entity2>
{
...
}
И затем, пытаясь использовать все это в функции ...
C c = new C();
IB<IEntity, IEntity> ib = c;
Не может это безумие или простота.
Как мне заставить это работать?