【问题标题】:How to force child of class to override field with child of field's type?如何强制类的孩子用字段类型的孩子覆盖字段?
【发布时间】:2014-04-14 01:07:41
【问题描述】:

抱歉标题混乱,我不知道如何用一句话来描述这个问题。我有一个有 2 个孩子的父类 EmergencyWorker:

public abstract class EmergencyWorker
{
    protected virtual Vehicle vehicle;
}

public class EMT : EmergencyWorker
{
    protected override Ambulance vehicle;
}

public class Firefighter : EmergencyWorker
{ 
    protected override FireTruck vehicle;
}

救护车和消防车都是车辆。 我希望它使属于 EMT 的每辆车始终是救护车,而属于消防员的每辆车始终是救火车。

Virtual 和 Override 对此不起作用,因为我得到“修饰符 'override' 对此项目无效” 我对泛型不是很有经验,但我怀疑它们在这里可能会有所帮助。

那么如何强制 EmergencyWorker 的子级用 Vehicle 类型的子级覆盖车辆字段?

【问题讨论】:

    标签: c# oop generics inheritance overriding


    【解决方案1】:

    您可以使用泛型类型参数来做到这一点。

    public abstract class EmergencyWorker<T> where T : Vehicle
    {
        protected T vehicle;
    }
    
    public class EMT : EmergencyWorker<Ambulance>
    {
    }
    
    public class Firefighter : EmergencyWorker<FireTruck>
    { 
    }
    

    【讨论】:

    • 太棒了,这太完美了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2017-12-09
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多