c# - 编译时多态/重载

标签 c# .net polymorphism

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

多态性对我来说意味着多种形式,我不太明白重载如何帮助实现这一目标。

最佳答案

多态性发生在运行时。就 OOP 而言,它是调用方法的实践,并且在编译时,不知道该方法将在哪个对象上调用。经典示例是 Shapes、Circles、Squares 等。您有一个 Shapes 集合,每个 Shapes 都实例化为 Circle、Square 等。编译器既不知道也不关心您在任何给定时间调用 DrawErase 的 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/

相关文章:

c# - C++ 和 C# 在数学方面的性能差异

.net - 如何获取 HttpWebRequest 连接到的服务器的 IP 地址?

c# - 在 C# 中拆分 CSV 文件的有效方法

iphone - 我想使用多态性对我的难闻代码进行重构。这是一个删除 'if' 语句的问题

java - 使用关键字 'this'

c# - 具有.Net 客户端和Android 客户端的WCF 服务器策略?

c# - 所有 C# .NET 方法的引用库

c# - 打印预览 C# 中的居中图像

c# - 动态 PDF 或 Word 文档生成的最佳库?

c++ - 静态函数和非虚拟方法可以被覆盖吗?什么是静态多态?