嗯,标题说,但我会更具体到我的情况,并解释我的问题。 我有以下类别:随时修改一个字段另一个字段被修改
class Attribute{
private int score;
private int tempScore;
private int misc;
// here I have getters and setters
// A method
public int Modifier(){
return (score+tempScore-10)/2;
}
}
和
class SavingThrow{
private int base;
private int resistance;
private int bonus;
private int misc;
//Getters and setters here
//A method
public int Total(){
return base + resistance + bonus + misc;
}
}
让我们说,现在我有属性的智慧和意志SavingThrow一个玩家A。每当第一被修改,例如:
A.Wisdom.Score = 12;
然后,第二,必须修改作为结果。在这个例子中,我应该做:
A.Will.Bonus = A.Wisdom.Modifier();
就如何实现这一目标任何想法?
我想到了下面的解决方案,但它不满足我,因为我要解释。
我不会定义getter,所以只能通过预定义的公共方法(例如SetWisdom(int score))来完成对Wisdom的外部访问,并在该方法中更新Will。但是,问题在于,如果我必须修改tempScore或misc,我必须制定另一种方法。 看起来效率很低,特别是如果我添加更多的字段到属性类。
否则,我可以使用SetWisdom(属性智慧)方法,用一个新对象替换整个属性,其中我必须复制所有未修改的字段并替换我需要的字段。 这似乎有点笨拙和不雅。 你会选择哪种解决方案,更重要的是,对于如何处理这个有更好的想法吗?
'base'是C#中的关键字,您不能将其用作变量名称。 – UnholySheep
我认为[你正在寻找'INotifyPropertyChanged'](https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v = vs.110).aspx)。您的字段必须更改为属性,并且在处理属性时,您可以将方法'Total'和'Modifier'更改为只读属性,以符合标准的.NET用法。 –
@UnholyShep:是的,我刚刚注意到了。我对C#很陌生,所以我不知道它。 – Harnak