我有三种类型:


Patient
Inpatient : Patient
Outpatient : Patient


我有一个填充基本患者及其所有属性的方法:PatientRepository.FillPatient()并返回一个Patient对象。

然后,我需要检查一下Patient类型是什么,并向下转换为OutpatientInpatient

当我尝试向下转换时,抛出Unable to cast object of type 'Patient' to type 'Inpatient'.这是运行时错误。

if (patient.Type == PatientType.Inpatient)
{
    var inpatient = (Inpatient)patient;
    return inpatient;
}

public enum PatientType
{
    Inpatient, Outpatient
}


我不知道为什么。我在这里从根本上做错了吗?

最佳答案

您的FillPatient应该以正确的方式返回特定的类:

public static Patient FillPatient()
{
    if (something) {
        return new InPatient();
    }
    else {
        return new OutPatient();
    }
}


然后您可以将其下放到特定班级

Patient patient = PaitentRepository.FillPatient();

if (patient is InPatient) {
    ...
}
else {
    ...
}


注意:大多数情况下,一个类是其他N个类的基类时,该基类(您所用的患者)将是抽象的。

08-05 20:52