今天有人告诉我,C# 中的接口实现只是“Can-Do”关系,而不是“Is-A”关系。这与我长期以来所相信的LSP(里氏替换原理)相冲突。我一直认为所有的继承都应该意味着“Is-A”关系。
所以,如果接口实现只是一种“Can-Do”关系。如果有一个接口“IHuman”和“IEngineer”,并且一个类“Programmer”继承自“IHuman”和“IEngineer”怎么办?当然,“程序员”是“IHuman”和“IEngineer”。
如果它只是“Can-Do”关系,是否意味着我们不能期望“程序员”实例行为在被视为 IHuman 和被视为 IEngineer 时可能有所不同?
根据我的经验,思考“是”和“可以做”的关系并没有多大帮助。你很快就会遇到问题。基本上,这是现实世界和面向对象之间的阻抗不匹配。无论有多少人实际上谈论对现实世界进行建模,您从根本上都需要了解类型之间的关系在您所使用的平台上意味着什么。
有时接口可以用作功能,有时它们可以代表更多正常的“is-a”关系。我不会太在意它——只要确保你了解他们能做什么和不能做什么就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)