【发布时间】:2020-05-17 19:40:52
【问题描述】:
我的问题是由于某种原因,当我通过泛型传递派生类时,我不能使用派生类作为基础。
让我们假设下面的代码来描述这个想法
public class Person
{
public virtual bool IsGood { get; }
}
public class GoodPerson : Person
{
public override bool IsGood { get; } = true;
}
public class BadPerson : Person
{
public override bool IsGood { get; } = false;
}
public class Case<T>
{
public T PersonType { get; set; }
}
public class TypeReflector
{
public Person Reflect(Case<Person> person)
{
if (person.PersonType.IsGood)
return (GoodPerson)person.PersonType;
return (BadPerson)person.PersonType;
}
}
并调用如下:
var reflector = new TypeReflector();
var result = reflector.Reflect(new Case<GoodPerson>());
为什么不能用Case<GoodPerson> 调用方法Reflect。
但如果没有Case,如下所示:
public Person Reflect(Person person)
{
if (person.IsGood)
return (GoodPerson)person;
return (BadPerson)person;
}
【问题讨论】:
-
this 可能会帮助您理解为什么
Case<GoodPerson>不是Case<Person>的一种。 -
Case<Person>和Case<GoodPerson>显然是不同的类型,你可以引入一个接口并为此使用协方差
标签: c# oop generics inheritance