gpt4 book ai didi

oop - Kent Beck 的《测试驱动开发示例》中的示例

转载 作者:行者123 更新时间:2023-12-04 15:02:18 24 4
gpt4 key购买 nike

我正在通读 Test Driven Development: By Example其中一个例子让我很烦。在第 3 章(人人平等)中,作者在 Dollar 类中创建了一个 equals 函数来比较两个 Dollar 对象:

public boolean equals(Object object)
{
Dollar dollar= (Dollar) object;
return amount == dollar.amount;
}

然后,在接下来的章节(4:隐私)中,他将 amount 设为 dollar 类的私有(private)成员。

private int amount;

测试通过。这不应该在 equals 方法中导致编译器错误,因为虽然对象可以访问它自己的 amount 成员,但它被限制访问另一个 Dollar 对象的 amount 成员?

//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount

我是否从根本上误解了 private

更新我决定返回并手动编写本书的代码,当我进入下一部分(第 6 章 - 人人平等,Redux)时,他们将 amount 插入父类并使其受到保护,我遇到了访问问题:

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# 中是基于实例的?

最佳答案

是的,您从根本上误解了 private。隐私是类特定的,而不是实例特定的。

关于oop - Kent Beck 的《测试驱动开发示例》中的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com