How to override an inherited class property in C#?

2019-04-04 05:44发布

问题:

I learned how to inherit methods by adding virtual to the method in the base class and override in the new class. But what do I do to inherit properties?

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

This pops an error, saying that modifiers virtual/override should not be used here.

回答1:

fly is not a property, it is a field. Fields are not overrideable. You can do this:

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

Note that I had to mark fly as protected.

But even better, I would do something like this:

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;
        }
    }
}


回答2:

That is not a property in your example, it is a field. Try using a property, or simply marking fly as protected so it can be accessed in your subclass.



回答3:

This code:

private virtual string fly = "Yes, I can!";

is creating a field, not a property. Also, in order to be virtual, your property must have access higher than 'private'. You probably want something like this:

public virtual string Fly
{
  get { return "Yes, I can!"; }
}