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