前の質問 (より簡単):別のクラスからのクラスの更新、カプセル化の問題
例:
class User
{
public void BeginWork(Device device)
{
Command command = new Command(1);
device.ExecuteCommand(command);
Console.WriteLine("Result={0}", command.Result);
}
}
class Command
{
public int Code {get; private set;}
public Command(int code) { Code = code; }
public int Result { get; set; }
}
class Device
{
public void ExecuteCommand(Command command)
{
/* ... */
// Analyzing and execution of command leads to a result
if(command.Code == 1) command.Result = 5;
else if(command.Code == 2) command.Result = 36;
/* ... */
}
}
使用法:
User u = new User();
Device d = new Device();
u.BeginWork(d);
Result
ご覧のとおり、クラスのプロパティのパブリック セット アクセサーによってカプセル化が解除されますCommand
ExecuteCommand
結果を返すようにメソッドを変更することは提案しないでください。実際の状況ははるかに複雑です。
カプセル化を維持するには?