如何在C#中覆盖inheritance的类属性?
我学习了如何通过向基类中的方法添加virtual
并在新类中override
来inheritance方法。 但是我该如何inheritance属性呢?
class bird { private virtual string fly = "Yes, I can!"; public string CanI() { return fly ; } } class penguin : bird { private override string fly = "No, I can't!"; }
这会弹出一个错误,说不应该在这里使用修饰符virtual
/ override
。
fly
不是财产,它是一个领域。 字段不可重写。 你可以这样做:
class bird { protected virtual string Fly { get { return "Yes, I can!"; } } public string CanI() { return Fly; } } class penguin : bird { protected override string Fly { get { return "No, I can't!"; } } }
请注意,我必须将fly
标记为protected
。
但更好的是,我会做这样的事情:
abstract class Bird { public abstract bool CanFly { get; } public string SayCanFly() { if(CanFly) { return "Yes, I can!"; } else { return "No, I can't!"; } } } class Penguin : Bird { public override bool CanFly { get { return false; } } } class Eagle : Bird { public override bool CanFly { get { return true; } } }
这不是您示例中的属性,它是一个字段。 尝试使用属性,或者只是将fly标记为受保护,以便可以在子类中访问它。
这段代码:
private virtual string fly = "Yes, I can!";
正在创建一个字段,而不是一个属性。 此外,为了虚拟化,您的财产必须具有高于“私人”的访问权限。 你可能想要这样的东西:
public virtual string Fly { get { return "Yes, I can!"; } }