【发布时间】:2019-07-15 16:19:57
【问题描述】:
所以,这是同一个主题的两个问题。
我一直在寻找方法让我对来自类型的数据的访问更加干净。例如,假设我正在创建某种 Health 类,并为它编写一些字段。
public class Character {
public Health Health;
}
public class Health {
public short Current;
public short Maximum;
}
现在这可行,但我正在寻找一种方法,当我想获得当前的健康值时,我可以避免使用Health.Current。像这样的:
public class Health {
private short Current;
public short Maximum;
public short this {
get { return Current; }
set { Current= value; }
}
}
我原以为这会奏效,但不幸的是它没有。有没有办法做到这一点?
如果没有,那么有没有办法做到这一点:
public class Character {
public short Health;
public short Health.Maximum;
}
它会产生类似的预期效果。
编辑:另外,我知道这是不必要的,但它仍然是我想要的。 (问题有小错误,已修复)
【问题讨论】:
-
如果你使用属性而不是公共字段(共识是you should),那么你的字符类可以包含
public short MaximumHealth => Health.Maximum;- 这就是你所追求的吗? -
不完全是,我所追求的是一种方法,以便仅调用
Health将返回Health.Value,而不会丢失Health.Maximum字段,第三个代码块演示了我的最终目标是最好的。 (我更喜欢属性,我只是为了举例而使用了字段)对不起,我在代码中犯了一个错误,我现在已经修复了,问题应该更清楚了。 -
好吧,您可以将健康类中的隐式运算符添加到返回当前值的short -
public static implicit operator short(Health health) { return health.Current ; } -
这正是我正在寻找的功能,您可以将其发布为答案。虽然“可以”用斜体字有什么原因,但除了能够直接访问
Health类本身的实例之外,还有什么损失吗? -
你可以这样做,但是这会让你的代码的大多数读者感到困惑。如果
character.Health应该返回当前运行状况,则将其设为返回当前运行状况的属性,并将MaximumHealth设为另一个属性。当您不更改某些内容的含义时,转换运算符是为了方便。例如不会丢失精度的数字转换。