今天有人告诉我,C#中的接口(interface)实现只是“Can-Do”关系,而不是“Is-A”关系。这与我长期以来信奉的LSP(Liskov Substitution Principle)有冲突。我一直认为所有的继承都应该意味着“Is-A”关系。
所以,如果接口(interface)实现只是一个“Can-Do”的关系。如果有一个接口(interface)“IHuman”和“IEngineer”,一个类“Programmer”继承自“IHuman”和“IEngineer”怎么办?当然,“程序员”是“IHuman”和“IEngineer”。
如果只是“Can-Do”关系,是否意味着我们不能期望“Programmer”实例行为在被视为 IHuman 和 IEngineer 时可能有所不同?
最佳答案
根据我的经验,考虑"is"和“可以”的关系并没有多大帮助。你很快就会遇到问题。基本上,这是现实世界和 OO 之间的阻抗不匹配。无论实际上有多少人谈论对现实世界建模,您都需要从根本上了解类型之间的关系在您使用的平台上意味着什么。
有时接口(interface)可以用作功能,有时它们可以表示更多正常的“is-a”关系。我不会太在意它 - 只要确保您了解他们可以做什么和不能做什么。
关于C#接口(interface)实现关系只是 "Can-Do"关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/255644/