简体   繁体   中英

How to override an inherited class property in C#?

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.

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

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM