问题标签 [polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
28562 浏览

c# - 隐藏继承的成员

我正在寻找某种方法来有效地隐藏继承的成员。我有一个从公共基类继承的类库。一些较新的后代类继承了已退化的依赖属性,并且在使用IntelliSense或在可视化设计器中使用这些类时可能会有些混乱。

这些类都是为 WPF 或 Silverlight 2.0 编译而编写的控件。我知道ICustomTypeDescriptorand ICustomPropertyProvider,但我很确定它们不能在 Silverlight 中使用。

与其说是功能问题,不如说是可用性问题。我该怎么办?

更新

我真正想隐藏的一些属性来自不属于我自己的祖先,并且由于我正在设计的特定工具,我无法使用new操作员进行成员隐藏。(我知道,这很荒谬)

0 投票
10 回答
1584 浏览

c++ - 继承和多态 - 易用性 vs 纯度

在一个项目中,我们的团队正在使用对象列表对应该以类似方式处理的数据集执行大规模操作。特别是,不同的对象在理想情况下会表现相同,这很容易通过多态性实现。我遇到的问题是继承意味着是一种关系,而不是有一种关系。例如,几个对象有一个伤害计数器,但是为了使它易于在对象列表中使用,可以使用多态性——除非这意味着一个不正确关系。(人不是伤害计数器。)

我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖于继承。放弃is a / has a Ideal 以换取易于编程会更好吗?

编辑:更具体地说,我使用的是 C++,因此使用多态性将允许不同的对象“行为相同”,因为派生类可以驻留在单个列表中并由基的虚函数操作班级。使用接口(或通过继承模仿它们)似乎是我愿意使用的解决方案。

0 投票
16 回答
6997 浏览

oop - 使用多态性的表达式评估和树行走?(阿拉史蒂夫耶格)

今天早上,我在阅读Steve Yegge 的《当多态性失败时》时,遇到了一个问题,他的一位同事曾经在潜在员工来亚马逊面试时问他们这个问题。

作为多态性的一个例子,让我们看一下经典的“eval”面试问题,(据我所知)是由 Ron Braunstein 带到亚马逊的。这个问题非常丰富,因为它设法探讨了各种各样的重要技能:OOP 设计、递归、二叉树、多态性和运行时类型、一般编码技能,以及(如果你想让它更难的话)解析理论.

在某些时候,候选人希望意识到您可以将算术表达式表示为二叉树,假设您只使用诸如“+”、“-”、“*”、“/”之类的二元运算符。叶节点都是数字,内部节点都是算子。评估表达式意味着遍历树。如果应聘者没有意识到这一点,你可以温和地引导他们,或者如果有必要,直接告诉他们。

即使你告诉他们,这仍然是一个有趣的问题。

问题的前半部分,有些人(我将保护他们的名字直到我垂死的呼吸,但他们的名字首字母是威利刘易斯)觉得如果你想称自己为开发人员并在亚马逊工作,这是一个工作要求,实际上有点难. 问题是:如何从诸如“2 + (2)”之类的算术表达式(例如在字符串中)到表达式树。在某个时候,我们可能会在这个问题上遇到 ADJ 挑战。

后半部分是:假设这是一个 2 人项目,你的搭档,我们称之为“Willie”,负责将字符串表达式转换为树。你得到了简单的部分:你需要决定 Willie 用什么类来构造树。你可以用任何一种语言来做,但一定要选择一种,否则威利会把汇编语言交给你。如果他感到不耐烦,那将是针对不再生产的处理器。

你会惊讶于有多少候选人喜欢这个。

我不会给出答案,但标准错误解决方案涉及使用 switch 或 case 语句(或只是好的老式级联 ifs)。稍微好一点的解决方案涉及使用函数指针表,而可能最好的解决方案涉及使用多态性。我鼓励你在某个时候完成它。好玩的东西!

所以,让我们尝试通过三种方式来解决这个问题。如何使用级联-if、函数指针表和/或多态性从算术表达式(例如在字符串中)如“2 + (2)”到表达式树?

随意解决一个,两个或所有三个。

[更新:修改标题以更好地匹配大多数答案。]

0 投票
6 回答
7292 浏览

c# - 我可以防止继承的虚方法在子类中被覆盖吗?

我有一些这样的课程

是否可以在不破坏以下代码的情况下防止 C 类覆盖 Render 方法?

0 投票
11 回答
21897 浏览

delphi - 在 Delphi 中重新引入函数

reintroduce在 Delphi中使用关键字的动机是什么?

如果您有一个子类包含一个与父类中的虚函数同名的函数,并且没有使用 override 修饰符声明它,那么这是一个编译错误。在这种情况下添加 reintroduce 修饰符可以修复错误,但我从未掌握编译错误的原因。

0 投票
12 回答
62956 浏览

c++ - 虚函数和vtable是如何实现的?

我们都知道 C++ 中的虚函数是什么,但是它们是如何在深层次上实现的呢?

可以在运行时修改甚至直接访问 vtable 吗?

vtable 是否存在于所有类,还是只存在于至少具有一个虚函数的类?

抽象类是否只是为至少一个条目的函数指针设置了一个 NULL 值?

拥有一个虚函数会减慢整个班级的速度吗?还是只调用虚拟函数?如果虚拟功能实际上是否被覆盖,速度是否会受到影响,或者只要它是虚拟的就没有影响。

0 投票
8 回答
108546 浏览

c++ - “纯虚函数调用”崩溃从何而来?

我有时会注意到程序在我的计算机上崩溃并出现错误:“纯虚函数调用”。

当无法从抽象类创建对象时,这些程序如何编译?

0 投票
7 回答
8778 浏览

oop - 多态性和多分派有什么区别?

...或者它们是同一件事吗?我注意到每个都有自己的 Wikipedia 条目:PolymorphismMultiple Dispatch,但我无法看到这些概念的不同之处。

编辑:重载如何适应这一切?

0 投票
8 回答
11526 浏览

c# - 如何在 Ruby 中实现多态性?

在 C# 中,我可以这样做:

显然,输出是(稍微解释一下):

  • 狗在睡觉
  • 猫在睡觉

由于 C# 经常因其冗长的类型语法而受到嘲笑,您如何处理诸如 Ruby 之类的鸭子类型语言中的多态性/虚拟方法?

0 投票
21 回答
291699 浏览

java - 多态性 vs 覆盖 vs 重载

在 Java 方面,当有人问:

什么是多态性?

重载覆盖是一个可以接受的答案吗?

我认为还有更多的东西。

如果您有一个抽象基类定义了一个没有实现的方法,并且您在子类中定义了该方法,那仍然是覆盖吗?

我认为重载肯定不是正确的答案。