Здравствуйте, у меня есть следующая проблема приведения классов.У меня есть класс Quest, который другие наследуют
public class Quest{}
public class QuestChild: Quest{}
Я использую универсальный валидатор, который ожидает получить какой-либо тип квеста
public interface IQuestValidator<in T> where T:Quest
{
bool IsCompleted(T quest);
bool IsFailed(T quest);
}
public class QuestValidator<T>: IQuestValidator<T> where T: Quest
{
public bool IsCompleted(T quest)
{
return false;
}
public bool IsFailed(T quest)
{
return true;
}
}
Когда я создаю валидатор для каждого производного класса QuestЯ хочу привести его к базовому выражению следующим образом:
IQuestValidator<Quest> c = (IQuestValidator<Quest>)new QuestValidator<QuestChild>();
Но когда я выполняю эту строку, она возвращает ошибку «InvalidCastException».Почему это происходит или как я могу решить эту проблему для правильного приведения?
Примечание. Кажется, что этот вопрос похож на Проблема дисперсии C #: назначение List как List , но так какЯ не использую IEnumerable, я не могу сделать то же самое.