编译时间多态/重载

pdi*_*ddy 2 .net c# polymorphism

为什么重载被认为是多态的一种形式,或者是实现多态的一种方式.

我的多态性意味着多种形式,我不太明白超载有助于实现这一目标.

Ada*_*kis 7

多态性是在运行时发生的事情.就OOP而言,它是调用方法的实践,并且在编译时知道该方法将被调用哪个对象.经典的例子是Shapes,Circles,Squares等.你有一个Shapes集合,每个Shapes都被实例化为Circle,Square等等.编译器既不知道也不关心你在任何给定时间调用DrawErase打开哪种类型的形状; 程序运行时会发生这种情况.

方法重载发生在编译时.您有多个具有相同名称参数不同的方法.当您调用其中一个方法时,编译器将根据您提供的参数确定哪个重载最匹配.

为什么重载被认为是多态的一种形式,或者是实现多态的一种方式.

在root上,多态性是在同一API下处理多个类型的能力.从技术上讲,方法重载确实属于这个问题.事实上,根据维基百科,方法重载被称为"ad-hoc多态",但我从未听过现实生活中使用过的这个术语(并不是说我是最后的权威). 通常,多态性仅指方法的动态绑定,如Shape,Circle,Square示例.

还有"参数多态",虽然这通常是我可能有限的经验,根据语言被称为泛型或模板(它们相同;两者之间存在细微差别)

  • 多态性不需要在运行时发生.考虑运算符重载 - 这不是编译时多态的形式吗?如果这个答案明确包括"子类型多态性"正在被讨论的话,我会+1:无聊的单一调度运行时绑定:-) (3认同)