类变量和具有继承的属性

问题描述 投票:0回答:1

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

我应该选择哪一个?

c# class properties
1个回答
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;
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.