如何覆盖C#中继承的类属性? [英] How to override an inherited class property in C#?

查看:112
本文介绍了如何覆盖C#中继承的类属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我学习了如何继承方法,通过向基类中的方法添加 virtual ,在新类中添加 override 类。

  class bird 
{
private virtual string fly =我可以!;
public string CanI(){return fly; }
}

class penguin:bird
{
private override string fly =不,我不能!
}

这会弹出一个错误,说修饰符 / code> / 重写不应在此使用。

解决方案

fly 不是属性,它是一个字段。字段不可覆盖。您可以这样做:

  class bird {
protected virtual string Fly {
get {
return是的,我可以!
}
}
public string CanI(){return Fly; }
}

class penguin:bird {
protected override string Fly {
get {
return不,我不能!
}
}
}

请注意, $



将会做这样的事情:

  abstract class Bird {
public abstract bool CanFly {get; }
public string SayCanFly(){
if(CanFly){
return是的,我可以!
}
else {
return不,我不能!
}
}
}

class Penguin:Bird {
public override bool CanFly {
get {
return false;
}
}
}

class Eagle:Bird {
public override bool CanFly {
get {
return true;
}
}
}


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

这篇关于如何覆盖C#中继承的类属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆