类变量和具有继承的属性
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;
}
}
如果您不需要它,请不要使用它
以上是关于类变量和具有继承的属性的主要内容,如果未能解决你的问题,请参考以下文章