好的,几乎在我所阅读的每个地方都提到了 getters/setters 是“邪恶”的。作为一个经常在 PHP / C# 中使用 getters/setters 的程序员,我不明白它们为什么会被认为是“邪恶”的。我已经读过它们破坏封装等等的问题,但是这里有个简单的例子。
class Armor{
int armorValue;
public:
Armor();
Armor(int); //int here represents armor value
int GetArmorValue();
void SetArmorValue(int);
};
现在,假设获取器和设置器是“邪恶的”。 那么在初始化后如何更改成员变量呢?
例如:
Armor arm=Armor(128); //armor with 128 armor value
//for some reason I would like to change this armor value
arm.SetArmorValue(55); //if i do not use getters / setters how is this possible?
假设以上内容不可行,出于某种原因。 如果我的游戏将防具值限制在1到500之间。(没有任何一件防具的防御值可以高于500或低于1)。
现在我的实现变成了:
void Armor::SetArmor(int tArmValue){
if (tArmValue>=1 && tArmValue<=500)
armorValue=tArmValue;
else
armorValue=1;
}
那么,如果不使用getter/setter,我还能怎样施加这种限制呢? 如果不使用getter/setter,我还能怎样修改属性呢? 在情况1中,armorValue是否只应该是公共成员变量,在情况2中使用getter/setter?
好奇。谢谢各位。