私はテスト駆動開発を読んでいます:例によって、例の1つが私を悩ませています。第3章(すべての平等)では、作成者は2つのオブジェクトを比較するequals
関数をクラスに作成します。Dollar
Dollar
public boolean equals(Object object)
{
Dollar dollar= (Dollar) object;
return amount == dollar.amount;
}
次に、次の章(4:プライバシー)で、彼は金額をドルクラスのプライベートメンバーにします。
private int amount;
そしてテストに合格します。オブジェクトは他のオブジェクトのメンバーへのアクセスが制限されているequals
ため、オブジェクトは自身のメンバーにアクセスできますが、これによってメソッドでコンパイラエラーが発生することはありませんか?amount
Dollar
amount
//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount
私は根本的に誤解していprivate
ますか?
更新 私は戻って本と一緒に手動でコーディングすることにしました。次のパート(第6章-すべての平等、Redux)に到達すると、親クラスに金額をプッシュして保護することになり、アクセスの問題が発生します:
public class Money
{
protected int amount;
}
public class Dollar : Money
{
public Dollar(int amount)
{
this.amount = amount;
}
// override object.Equals
public override bool Equals(object obj)
{
Money dollar = (Money)obj;
//"error CS1540: Cannot access protected member 'Money.amount'
// via a qualifier of type 'Money'; the qualifier must be of
// type 'Dollar' (or derived from it)" on the next line:
return amount == dollar.amount;
}
}
protected
これは、C#でインスタンスベースであることを意味しますか?