类变量和具有继承的属性

时间:2017-12-21 15:07:33

标签: c# class properties

我对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...
}

我更喜欢哪一个?

1 个答案:

答案 0 :(得分:2)

  

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

是的,就像你写的那样

  

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

是的,在第一个示例中,您可以直接操作派生类中的字段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;
    }
}

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