问题标签 [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 投票
2 回答
568 浏览

c# - 创建派生控件

我有一个抽象基类,它继承自然UserControl后用于派生许多类。

我遇到的问题是如何优雅地确保InitializeComponent()为每一层类调用生成的函数。

因此(抽象)基类上有许多控件,这些控件将为所有子类共享。创建子类的实例时,首先调用基构造函数,但是有什么方法可以优雅地调用派生InitializeComponent(),而不必为每个派生类有效地构建相同的构造函数

我想知道是否有比在每个派生类中重复自己更有效的方法?

实际上,我希望(抽象)基类能够调用

毕竟,当它在基本构造函数中(在调试中)时,它知道它是一个派生实例......

0 投票
3 回答
461 浏览

linq - LinQ ORM 数据对象和继承

我正在考虑如何做到这一点,但我的数据库、文章、NewsItems 等中有几种不同形状的数据。

它们都有一些共同点,它们都有 ID(在数据库中它们被命名为 ArticleID、NewsID 等)

他们都有一个标题

他们都有BodyText

他们都有一个状态

他们都有一个DateAdded

我想做的是标准的类继承。

我想要一个名为Content的大师班(我不需要将其写入数据库),其字段如下:

  • ID
  • 标题
  • 字幕
  • 主体
  • 地位
  • 添加日期

我不确定如何使用 ORM 做到这一点。为什么我想要这个是因为我可以将一个内容列表传递给负责渲染它的 UserControl。它只需要所有对象共有的信息。

这甚至可能吗?

0 投票
6 回答
523 浏览

java - 组合语法会成为 Java 的有用补充吗?

首先,我对语言理论几乎一无所知,除了 Java 之外我几乎不知道任何其他语言,但我有一个我认为很酷的想法,但我需要你们告诉我:
a:为什么它很烂
b:语言 x 多年来是如何做到的
c:我的思想多么糟糕
d:以上所有

这个想法将使组合具有与代码重用相同的便利性extends

因此,如果您有这样的课程:

然后你有一个这样的课程:

然后你就可以这样做了:

无需在 B 类中添加委托。但是你也可以像继承一样做同样的事情,即:

缺点包括:

  • 方法隐藏在源代码中,使得调用的来源不太明显,但情况也是如此extends
  • 如果组合字段共享相同的方法签名,则需要解决冲突(冲突接口如何解决这个问题?)
  • 如果您想拥有多个相同类型的组合字段,那么委托给哪个字段将会有明显的冲突
  • 可能还有 100 件我没想到的事情

就像我说的,我显然不是语言理论家,而且我还没有花很多时间思考这个问题,这个想法突然出现在我的脑海中,我想知道我错了多少。我只是觉得这会很酷。

0 投票
5 回答
58997 浏览

c++ - 来自两个派生类的多重继承

我有一个充当接口的抽象基类。

我有两个“集”派生类,它们实现了抽象类的一半。(一个“set”定义了与初始化相关的抽象虚拟方法,另一个“set”定义了与实际“工作”相关的那些。)

然后我有派生类,它们使用多重继承来构造完全定义的类(并且本身不添加任何东西)。

所以:(错误的伪代码)

首先,我可以这样做吗?我可以从两个派生自同一个 Base 的类继承吗?(但愿如此)。

不过,这是“真正的问题”(我在上面撒了一点谎以简化示例)。

我真正所做的是向基类添加非抽象访问器方法:

因为,一个常见的习惯是将所有虚拟方法设为私有。

不幸的是,现在 AbsInit 和 AbsWork 都继承了这些方法,因此 NotAbsTotal 继承了“每个中的两个”(我意识到我可能正在扼杀编译时真正发生的事情)。

无论如何,g++ 在尝试使用该类时抱怨说:“对成员 init() 的请求不明确”。

我假设,如果我将 AbsBase 类用作纯接口,这将是可以避免的(假设上面的例子是有效的)。

所以: - 我的实施是否可行?- 这是将虚拟方法设为私有的习语的限制吗?- 我如何重构我的代码来做我想做的事?(提供一个通用接口,但允许使用一种方法来交换成员函数“集合”的实现)

编辑:

似乎我不是第一个: http ://en.wikipedia.org/wiki/Diamond_problem

似乎虚拟继承是这里的解决方案。我以前听说过虚拟继承,但我还没有深入了解它。我仍然愿意接受建议。

0 投票
3 回答
554 浏览

oop - 在不创建子类型关系的情况下创建继承的任何明智示例?

我一直在教 OOP,并试图向我的学生传达继承和创建两种类型之间的子类型关系之间的重要区别。例如,在 C++ 中,我可以使用私有继承来确保外部没有人看到子类型关系。

然而,虽然我可以想到很多我不想创建子类型关系的情况(例如,通过双向链表类实现堆栈),但我真的想不出我会想的好的设计示例实际上选择遵循继承而不创建公共子关系(而不是使用聚合)。

有什么好的例子吗?

0 投票
5 回答
8307 浏览

c# - C#接口实现关系只是“Can-Do”关系?

今天有人告诉我,C#中的接口实现只是“Can-Do”关系,而不是“Is-A”关系。这与我长期以来对 LSP(Liskov Substitution Principle)的信念相冲突。我一直认为所有继承都应该意味着“Is-A”关系。

所以,如果接口实现只是一个“可以做”的关系。如果有一个接口“IHuman”和“IEngineer”,一个类“Programmer”继承自“IHuman”和“IEngineer”怎么办?当然,“程序员”是“IHuman”和“IEngineer”。

如果只是“Can-Do”关系,是否意味着我们不能期望“Programmer”实例的行为在被视为 IHuman 和被视为 IEngineer 时可能会有所不同?

0 投票
1 回答
854 浏览

objective-c - 使用父初始化程序初始化对象 (init) 后尝试访问子类方法时应用程序崩溃

我有一个继承 NSMutableArray 的类。

我使用以下方法初始化它:

MyClass 类 = [MyClass arrayWithContentsOfFile:path];

当我尝试访问我的任何子类方法时,应用程序崩溃并出现以下错误:

-[NSCFArray loadCards]:无法识别的选择器发送到实例 0x454a30 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSCFArray > mymethod]:无法识别的选择器发送到实例 0x454a30”应用程序 [32259:20b] 堆栈:( 2524995915,

我怀疑发生这种情况是因为 arrayWithContentsOfFile:path 返回 NSArray 而不是“MyClass”,因此它无法响应我的选择器。

有任何想法吗?

0 投票
2 回答
1416 浏览

c# - 继承问题 - 从 Access 数据库文件和 SQL Express 中检索数据

我正在开发一个应用程序,一开始将连接到 Access 数据库,并计划在不久的将来切换到 MS SQL 或 SQL Express。两种类型的数据库的数据表结构相同,我试图避免重复代码并试图找到最小化代码的方法。

例如,我编写了以下用于从 Access 数据库中检索数据的函数:

以下代码适用于 SQL Express 数据库:

这两种方法几乎相同。唯一的区别是 SqlCommand/OleDbCommand 和 SqlDataAdapter/OleDbDataAdapter。还有一些方法可以接受参数,例如:

在这种情况下,两个数据库的 SQL 查询字符串也相同,但 cmd 的类型(SqlCommand/OleDbCommand)有所不同。

如果有人能就如何避免重复代码和优化给定问题提出任何建议,我将不胜感激。

0 投票
6 回答
19532 浏览

perl - 如何在 Perl 中使用“use base”继承子例程?

如何在 Perl 中应用“使用基础”来继承某些基础模块的子模块?

我习惯了 C++ 继承机制,我为此搜索的所有网站都造成了更多的混乱,然后提供了帮助。我想做如下的事情:

.

Perl 抱怨/找不到 tbSub。

0 投票
2 回答
1498 浏览

vb.net - 公开 COM vb.net 类的继承成员

我有两个 vb.net 类:

当我通过VB6引用编译好的DLL时,Class2只暴露了sProperty2。如何通过 COM 访问基类 (sProperty1) 的继承属性?