你好,我有下一个问题铸造类。我有一个其他人继承的Quest类
public class Quest{}
public class QuestChild: Quest{}
我使用一个通用的验证器,期望接收某种类型的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的每个派生类创建验证器时,我想将它转换为它的Base clase,如下所示:
IQuestValidator<Quest> c = (IQuestValidator<Quest>)new QuestValidator<QuestChild>();
但是当我执行这一行时,它会返回错误“InvalidCastException”。为什么会发生这种情况或者如何才能解决这个问题?
注意:它似乎与C# variance problem: Assigning List<Derived> as List<Base>这个问题类似,但由于我没有使用IEnumerable,我不能这样做。