Моя проблема по какой-то причине, я не могу использовать производный класс в качестве базы, когда я передаю его через обобщенный c.
Давайте предположим, что приведенный ниже код описывает идею
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>());
, почему метод Reflect
нельзя вызвать с помощью Case<GoodPerson>
. но это возможно без Case
, как показано ниже:
public Person Reflect(Person person)
{
if (person.IsGood)
return (GoodPerson)person;
return (BadPerson)person;
}