글쎄, 제목은 그것을 말하지만 내 상황에 더 구체적이고 내 문제를 설명 할 것입니다. 나는 다음과 같은 클래스가 있습니다다른 필드가 수정 될 때마다 필드 수정하기
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();
이을 달성하는 방법에 대한 어떤 생각을?
나는 다음과 같은 해결책을 생각했지만, 내가 설명 할 이유 때문에 나를 만족시키지 못한다.
지혜에 대한 외부 액세스는 미리 정의 된 공용 메서드 인 SetWisdom (int score)을 통해서만 수행 할 수 있으며, 그 방법에서는 Will을 업데이트합니다. 비록이 문제는 tempScore 나 misc를 대신 수정해야한다면, 다른 방법을 사용해야한다는 것입니다. Attribute 클래스에 더 많은 필드를 추가하면 다소 불투명 한 것 같습니다 ().
그렇지 않으면, 전체 속성을 새로운 객체로 대체하는 SetWisdom (Attribute wisdom) 메소드를 사용할 수 있습니다.이 메소드에서는 수정되지 않은 모든 필드를 복사하고 필요한 것을 대체해야합니다. 조금 어색하고 우아하지 않다.. 어떤 솔루션을 선택 하시겠습니까? 더 중요하게는 이 처리 방법에 대한 더 좋은 아이디어가 있습니까??
'base'는 C#의 키워드이므로 변수 이름으로 사용할 수 없습니다. – UnholySheep
[INotifyPropertyChanged' (https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged (v = vs.110) .aspx)를 찾고 있다고 생각합니다. 필드가 속성으로 변경되어야하며, 사용자가 작업하는 동안 표준 .NET 사용과 일관되게 읽기 전용 속성으로 메서드 'Total' 및'Modifier '를 변경해야 할 수도 있습니다. –
@UnholyShep : 예, 방금 알아 챘습니다. 저는 C#에 익숙하지 않아서 몰랐습니다. – Harnak