Я читаю Разработка через тестирование: по примеру , и один из примеров меня беспокоит. В главе 3 (Равенство для всех) автор создает функцию 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
?
UPDATE
Я решил вернуться и написать код вместе с книгой вручную, и когда я перешел к следующей части (глава 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 #?