我对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...
}
我更喜欢哪一个?
答案 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;
}
}
如果您不需要,请不要使用它