为什么重载被认为是多态的一种形式,或者说是实现多态的一种方式。
多态性对我来说意味着多种形式,我不太明白重载如何帮助实现这一目标。
最佳答案
多态性发生在运行时。就 OOP 而言,它是调用方法的实践,并且在编译时,不知道该方法将在哪个对象上调用。经典示例是 Shapes、Circles、Squares 等。您有一个 Shapes 集合,每个 Shapes 都实例化为 Circle、Square 等。编译器既不知道也不关心您在任何给定时间调用 Draw
或 Erase
的 Shape 类型;该确定在程序运行时发生。
方法重载发生在编译时。您有多个具有相同名称但参数的方法。当您调用其中一种方法时,编译器 将根据您提供的参数决定哪个重载最匹配。
Why is overload considered a form of polymorphism, or a way to achieve polymorphism.
从根本上说,多态性是在同一 API 下处理多种类型的能力。所以从技术上讲,方法重载确实属于这种情况。事实上,根据wikipedia ,方法重载被称为“ad-hoc 多态性”,但我从未听说过这个术语在现实生活中使用过(不是说我是最终权威)。 通常多态性专门指方法的动态绑定(bind),如 Shape、Circle、Square 示例。
还有“参数多态性”,不过根据我可能有限的经验,这通常被称为泛型或模板,具体取决于语言(它们不相同;存在细微差别两者之间)
关于c# - 编译时多态/重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491944/