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

xml - 防止 IEnumerable 和 ICollection 的 XML 序列化& 继承类型

注意:XMLIgnore不是答案!

好的,所以继我关于XML 序列化和继承类型的问题之后,我开始将该代码集成到我正在处理的应用程序中,愚蠢地认为一切都会顺利......

我遇到了几个实现IEnumerableICollection<T>的类的问题

这些问题是,当 XMLSerializer 开始序列化这些时,它将它们视为外部属性,而不是使用我们希望它的属性(即带有AbstractXmlSerializer的属性)它来到这里并跌倒(由于类型不匹配),几乎让我们回到第一方。您也不能使用XmlIgnore属性来装饰这些方法,因此我们不能以这种方式阻止它。

我目前的解决方案是删除接口实现(在这个当前的应用程序中,这没什么大不了的,只是让代码更漂亮)。

我需要吞下我对这个的骄傲并接受它做不到吗?我知道我已经推动并从 XmlSerializer 中得到了比预期更多的东西:)


编辑

我还应该补充一点,我目前正在使用框架 2。


更新

我已经接受了lomaxx 的回答。在我的情况下,我实际上无法做到这一点,但我知道它会起作用。由于他们没有其他建议,我最终从代码中删除了接口实现。

0 投票
3 回答
1946 浏览

c++ - 有没有我们*需要*在 C++ 中受保护的继承的例子?

虽然我见过需要私有继承的罕见情况,但我从未遇到需要受保护继承的情况。有人有例子吗?

0 投票
10 回答
35842 浏览

c# - C# 有私有继承和受保护继承的概念吗?

C# 是否有私有/受保护继承的概念,如果没有,为什么?

C++

C#

我在 .aspx 页面中实现“类似 servlet”的概念,我不希望具体类能够查看 System.Web.UI.Page 基础的内部结构。

0 投票
2 回答
232 浏览

inheritance - 类设计决策

我有一个小难题,也许你可以帮我解决。

我今天一直在修改 ASP.NET 的 Membership 以添加一个间接级别。基本上,ASP.NET 的成员资格支持用户和角色,所有授权规则都基于用户是否属于角色。

我需要做的是添加功能的概念,其中用户将属于一个(或多个角色),并且该角色将具有与之关联的一个或多个功能,允许我们根据用户是否属于授权特定操作分配给已分配功能的角色。

话虽如此,我的问题与它无关,这是一个通用的类设计问题。

我想在我的基本 RoleProvider 类中提供一个抽象方法来创建函数(并将其持久化),但我想让它成为可选的以保存该函数的描述,所以我需要创建一个重载的 CreateFunction 方法签名接受名称,另一个接受名称和描述。

我可以想到以下场景:

  1. 使用 abstract 修饰符创建两个签名。这样做的问题是,实现者可能不尊重最佳实践,即一个重载应该调用另一个参数归一化的重载,并且逻辑应该只在最后一个(具有所有参数的那个)中。此外,要求开发人员实现这两种方法也不是很好。

  2. 创建第一个像虚拟的,第二个像抽象的。从第一个调用第二个,允许实现者覆盖行为。它有同样的问题,实施者在覆盖它时可能会做出“错误的决定”。

  3. 和以前一样,但不允许第一个被覆盖(删除虚拟修饰符)。这里的问题是实现者必须意识到可以使用空描述调用该方法并且必须处理这种情况。

我认为最好的选择是第三个...

一般如何处理这种情况?当您设计一个抽象类并且它包含重载方法时。我认为这并不少见……

0 投票
6 回答
496 浏览

python - 如何简单地从现有实例继承方法?

下面我有一个非常简单的例子来说明我正在尝试做的事情。我希望能够将 HTMLDecorator 与任何其他类一起使用。忽略它被称为装饰器的事实,它只是一个名字。

输出:

我正在尝试做的事情可能吗?如果是这样,我做错了什么?

0 投票
6 回答
28673 浏览

java - 为什么@OneToMany 不适用于 Hibernate 中的继承

我认为很清楚我要做什么。我希望 @ManyToOne 人被 UglyProblem 类继承。但是会有一个例外说:“在 UglyProblem 类中没有找到这样的属性 (mappedBy="person")”。

我发现的只有这个。我找不到 Emmanuel Bernard 的帖子,解释了这背后的原因。


不幸的是,根据 Hibernate 文档“未映射为 @MappedSuperclass 的超类的属性将被忽略。”

那么我认为这意味着如果我有这两个类:

那么字段foo将不会映射到 B 类。这是有道理的。但如果我有这样的事情:

我希望 UglyProblem 类有文件idname并且两个类都使用同一个表进行映射。(事实上​​,这正是发生的事情,我刚刚再次检查)。我有这张桌子:

回到我的问题:

我希望 @ManyToOne 人被 UglyProblem 类继承。

我希望这是因为所有其他映射字段都是继承的,并且我认为没有任何理由为 ManyToOne 关系设置此例外。


是的,我看到了。事实上,我在我的案例中使用了只读解决方案。但我的问题是“为什么……” :)。我知道hibernate团队的成员给出了解释。我找不到它,这就是我问的原因。

我想找出这个设计决策的动机。

(如果你对我如何面对这个问题感兴趣:我继承了一个使用 hibernate 3 构建的项目。它是 Jboss 4.0。一些东西 + hibernate 已经存在(你可以一起下载)。我正在将此项目移动到 Jboss 4.2。 2,我发现有“@OneToMany mappedBy”的继承映射,它在旧设置上运行良好......)

0 投票
17 回答
1180 浏览

c# - 为什么继承不能像我认为的那样工作?

我遇到了一些继承问题,因为我有一组相互关联的抽象类,需要一起重写以创建客户端实现。理想情况下,我想做以下事情:

这将允许任何使用 Dog 类的人自动获取 DogLegs 并允许任何使用 Animal 类的人获取 Legs。问题是被覆盖的函数必须与基类具有相同的类型,因此无法编译。我不明白为什么不应该这样做,因为 DogLeg 可以隐式转换为 Leg。我知道有很多方法可以解决这个问题,但我更好奇为什么这不可能/在 C# 中实现。

编辑:我对此进行了一些修改,因为我实际上是在代码中使用属性而不是函数。

编辑:我把它改回函数,因为答案只适用于那种情况(属性的 set 函数的 value 参数的协方差不应该起作用)。波动请见谅!我意识到这让很多答案看起来无关紧要。

0 投票
32 回答
396723 浏览

language-agnostic - 更喜欢组合而不是继承?

为什么更喜欢组合而不是继承?每种方法都有哪些取舍?什么时候应该选择继承而不是组合?

0 投票
7 回答
4659 浏览

delphi - 如果没有显式调用,Delphi 调用是否继承于被覆盖的过程

如果代码中没有显式调用(继承;),Delphi 调用是否继承于被覆盖的过程,我有以下结构(从超类到子类)

TForm >> TBaseForm >> TAnyOtherForm

项目中的所有表单都将派生自 TBaseForm,因为这将具有用于每个表单(安全性、验证等)的所有标准设置和破坏性部分。

TBaseForm 有 onCreate 和 onDestroy 程序以及执行此操作的代码,但是如果有人(即我)忘记将继承添加到 TAnyOtherForm 上的 onCreate 中,Delphi 会为我调用它吗?我在网上找到了说它不是必需的参考资料,但没有地方说如果代码中省略它是否会被调用。

另外,如果它确实为我调用了继承,它什么时候会调用它?

0 投票
8 回答
25868 浏览

c++ - C++ 继承和成员函数指针

在 C++ 中,成员函数指针可以用来指向派生(甚至是基)类成员吗?

编辑:也许一个例子会有所帮助。假设我们有一个按继承顺序排列的 三个类X,Y的层次结构。因此有一个基类和一个派生类。ZYXZ

现在我们可以p为 class定义一个成员函数指针Y。这写成:

(为简单起见,我假设我们只对带有签名的函数感兴趣void f()

这个指针p现在可以用来指向类的成员函数Y

这个问题(实际上是两个问题)是:

  1. 可以p用来指向派生类中的函数Z吗?
  2. 可以p用来指向基类中的函数X吗?