您好,我有下一个问题强制转换课程。我有一个别人继承的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的每个派生类创建验证器时,我想将其强制转换为它的Base类:
IQuestValidator<Quest> c = (IQuestValidator<Quest>)new QuestValidator<QuestChild>();
但是当我执行此行时,它返回错误“ InvalidCastException”。为什么会发生这种情况,或者我该如何解决才能正确投放?
注意:这似乎与问题C# variance problem: Assigning List<Derived> as List<Base>类似,但是由于我没有使用IEnumerable,所以我不能这样做。
答案 0 :(得分:1)
对应的类是不变的,因此无法进行强制转换! 尝试重新考虑设计以消除对所需演员表的需求。