问题标签 [inheritance]

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 投票
5 回答
6836 浏览

model-view-controller - MVC模型设计/继承

原谅这个模糊的标题,我不知道如何描述它。

如果您有一个通用模型“存档”,您如何根据用户选择的“类型”显示不同的视图/表单?

例如,用户创建一个新的“存档”,然后选择视频、书籍、音频等。从那里他们根据存档类型获得不同的形式。

还是将它们分成不同的模型会更好——视频、书籍、音频?

或者模型可以继承(如视频扩展存档)。我想这是基本的 OOP / 类,但不知道如何在这里应用它。

欢迎来自任何 MVC 框架的示例!

0 投票
4 回答
1067 浏览

vb.net - 为什么我不能继承 IO.Directory?

为什么我不能classVB.NET其中创建一个inherits System.IO.Directory?根据 Lutz Roeder 的说法,它没有被声明为NotInheritable!

我想创建一个utility classDirectory class. 例如,我想添加一个Directory.Move函数。

请告知,我会寄给你一个六包。好吧,没关系,我不会给你发任何东西,但如果你今晚来酒吧,我会勾搭你,然后在台球中击败你。

0 投票
6 回答
360 浏览

java - 如果有很多类型,我不应该按对象类型进行子类化吗?

我正在处理一个事件日志,其中有大约 60 种不同“类型”的事件。每个事件共享大约 10 个属性,然后有共享各种额外属性的事件子类别。

我如何处理这些事件确实取决于它们的类型或它们实现的分类接口。

但这似乎导致代码膨胀。我在子类方法中有很多冗余,因为它们实现了一些相同的接口。

使用具有“类型”属性的单个事件类并编写检查类型并维护类型类别的某种组织的逻辑是否更合适(例如,类别 a 的事件类型列表,类别 b 的第二个列表, ETC)?还是在这种情况下子类设计更合适?

第一种方法:

第二种方法:

我个人的看法是,似乎单个事件对象是合适的,因为,如果我正确地考虑它,就没有必要使用继承来表示模型,因为实际上只有行为和我的条件会改变基于类型。

我需要有执行以下操作的代码:

这在第一种方法中效果很好,因为我可以只调用事件上的方法并在每个适当的子类中实现“相同的代码”,而不是 instanceof。

但是第二种方法要简洁得多。然后我写了类似的东西:

而且我所有的“处理逻辑”都可以组织成一个类,并且没有一个是冗余地分布在子类中的。那么这种情况是不是虽然 OO 看起来更合适,但最好不要呢?

0 投票
9 回答
1021 浏览

c# - 在c#中使用继承而不是名称别名是否正确?

换句话说,是否正确使用:

代替:

我宁愿使用第一种方法,因为我只定义了一次 CustomerList,每次我需要一个客户列表时,我总是使用相同的类型。另一方面,使用名称别名方法不仅迫使我不得不在任何地方重新定义它,而且每次有人想要使用它时都可以给一个不同的别名(想想一个大团队),从而导致代码可读性差。

请注意,这种情况下的意图绝不是扩展类,而只是创建一个别名。

0 投票
3 回答
234 浏览

java - 在基类中有对象实例化“钩子”可以吗?

由于各种原因,我创建了自己的 Tree 实现,并提出了两个类,一个是“基”类,它是一个充满逻辑的通用树节点,另一个类扩展了更专业的类。

在我的基类中,某些方法涉及实例化新的树节点(例如添加子节点)。这些实例化在逻辑内部(例如在嵌套循环中),这使得逻辑难以与实例化分离。

因此,如果我不在特定类中覆盖这些实例,则会创建错误类型的节点。但是,我不想覆盖这些方法,因为它们还包含不应重复的共享逻辑!

问题可以归结为:

突然出现在我脑海中的第一件事是有一个扩展类可以覆盖的“创建钩子”:

现在。虽然这是一个很好的第一个想法,但从代码中散发出一股可怕的恶臭。有一些非常...的地方。

这就像光着身子做饭一样——感觉很危险,也没有必要

那么,你会如何处理这种情况呢?

0 投票
4 回答
457 浏览

c++ - 从 C++ 中的受保护类继承

假设我有以下声明:

我知道我可以执行以下操作:

但是有没有办法在没有 Over2 的情况下声明 Under2?

由于您必须扩展 Over1 以使用 Under1 的任何派生,这可能看起来很愚蠢,但在这种情况下可能有 30 种不同风格的 Under。我可以:

  • 将它们全部放在 Over1 中:没有吸引力,因为 Over2 可能只使用其中的 1 或 2 个
  • 将它们分别放在各自的 Over 版本中:从那以后就没有吸引力了,您将不得不从几乎同一个类中多次继承。
  • 找到一种方法来创建 Under1 的子代而不创建 Over1 的子代

那么这可能吗?

谢谢。

0 投票
5 回答
1958 浏览

c# - 如何防止类在 C# 中被继承?

在java中,我可以用'final'关键字来做到这一点。我在 C# 中看不到“final”。有替代品吗?

0 投票
5 回答
20976 浏览

.net - 如何使用 .Net 中的反射从密封类继承?

在你开始向我开火之前,我不打算这样做,但另一篇文章中有人说这是可能的。这怎么可能?我从来没有听说过使用反射继承任何东西。但是我看到了一些奇怪的东西......

0 投票
9 回答
32118 浏览

c# - 我可以用派生类型覆盖吗?

据我所知,在 C# 2.0 中无法执行以下操作

我通过在派生类中将属性创建为“新”来解决该问题,但这当然不是多态的。

2.0有解决方案吗?3.5 中解决此问题的任何功能如何?

0 投票
13 回答
29845 浏览

c# - 如何防止 C# 中的继承者调用基本构造函数?

我有一个(写得不好)基类,我想将它包装在一个代理对象中。基类类似于以下内容:

而且,我的代理类似于:

如果没有“fakeOut”构造函数,则预计会调用基本构造函数。但是,有了它,我希望它不会被调用。无论哪种方式,我要么需要一种不调用任何基类构造函数的方法,要么需要某种其他方法来有效地代理这个(邪恶的)类。