类变量和具有继承的属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类变量和具有继承的属性相关的知识,希望对你有一定的参考价值。

我对C#中的属性感到困惑,特别是继承:

我有一个Pokemon类作为一个例子,并希望保护统计数据以在子类中修改它们(例如在升级时),我想从外部读取统计数据。

这将是冗长的方式:

// base class
abstract class Pokemon
{

    // stats

    protected int hp;
    public int Hp {
        get
        {
            return hp;
        }
        protected set
        {
            hp = value;
        }
    }

    // other stats...
}

我的问题是:这是否有简短的表格?就像是:

// base class
abstract class Pokemon
{       
    // stats

    public int Kp { get; protected set; }

    // other stats...
}

这两个班级的工作方式类似吗?

我很困惑,因为你写的公共吸气者和制定者:

// base class
abstract class Pokemon
{       
    // stats

    public int Kp { get; set; }

    // other stats...
}

它的工作原理如下:

// base class
abstract class Pokemon
{
    // stats

    private int kp;
    public int Kp {
        get
        {
            return kp;
        }
        set
        {
            kp = value;
        }
    }

    // other stats...
}

我应该选择哪一个?

答案

我的问题是:这是否有简短的表格?

是的,就像你写的那样

这两个班级的工作方式类似吗?

是的,在第一个示例中,您可以直接在派生类中操作字段hp。 (个人我没有看到这一点,你也可以使它private

我应该选择哪一个?

这很难说。如果您需要额外的逻辑来验证属性的设置,请使用第一个选项。

private const int maxHP = 3000;
protected int hp;
public int Hp {
    get
    {
        return hp;
    }
    protected set
    {
        // extra validation
        if(value < maxHP)
            hp = value;
        else
            hp = maxHP;
    }
}

如果您不需要它,请不要使用它

以上是关于类变量和具有继承的属性的主要内容,如果未能解决你的问题,请参考以下文章

Java中 继承的概述与定义实例

Python基础学习第十五节 类与继承(类与继承,这一篇就足够了)

面对对象编程--类继承

Java 继承与重写重载

201671010136 总结类与对象

8.python面向对象基础(封装,继承,多态)