Kent Beck的测试驱动开发示例

Bri*_*ian 2 oop tdd private

我正在阅读测试驱动开发:通过示例,其中一个例子让我烦恼.在第3章(所有人的平等)中,作者equalsDollar类中创建了一个函数来比较两个Dollar对象:

public boolean equals(Object object)
{
    Dollar dollar= (Dollar) object;
    return amount == dollar.amount;
}
Run Code Online (Sandbox Code Playgroud)

然后,在下一章(4:隐私)中,他使金额成为美元类的私人成员.

private int amount;
Run Code Online (Sandbox Code Playgroud)

并且测试通过了.这不应该导致方法中的编译器错误,equals因为虽然对象可以访问自己的amount成员,因为它被限制访问其他Dollar对象的amount成员?

//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount
Run Code Online (Sandbox Code Playgroud)

我是否从根本上误解了private

更新 我决定返回并手动编写本书,当我进入下一部分(第6章 - Equality For All,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着protected基于IS实例的C#?

Car*_*ter 7

是的,你从根本上误解了私人.隐私是特定于类的,而不是特定于实例的.