如何在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!"; } }