如何在C#中覆盖继承的类属性?

Rob*_*Rob 17 c# inheritance class

我学习了如何通过添加virtual基类和override新类中的方法来继承方法.但是我该如何继承属性呢?

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!";
}
Run Code Online (Sandbox Code Playgroud)

这会弹出一个错误,说这里不应该使用修饰符virtual/ override.

jas*_*son 30

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!"; 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我必须标记flyprotected.

但更好的是,我会做这样的事情:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)