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

.net - .NET 继承与通用接口

你好,我目前正在玩城堡项目 ActiveRecord 和远程处理设施。

我目前的问题是我需要找到一种方法来在我的地址类中从 IBaseRepository 实现保存子,但我不知道如何。

这是我当前的代码,VS 在“实现 IAddress”行告诉我我必须为 [Shared].IBaseRepository(Of [Shared].IAddress) 实现 Sub Save(obj As IAddress)

并在线 Public Overrides Sub Save(ByVal obj As Address) Implements IBaseRepository(Of IAddress).Save

我无法实现保存,因为 [Shared].IBaseRepository(Of [Shared].IAddress) 中没有 Sub Save

我只是不明白:(请赐教。

蒂亚

0 投票
14 回答
160940 浏览

java - 在运行时,查找 Java 应用程序中扩展基类的所有类

我想做这样的事情:

所以,我想查看我的应用程序宇宙中的所有类,当我找到一个源自 Animal 的类时,我想创建一个该类型的新对象并将其添加到列表中。这使我无需更新事物列表即可添加功能。我可以避免以下情况:

使用上述方法,我可以简单地创建一个扩展 Animal 的新类,它会自动被拾取。

更新:2008 年 10 月 16 日上午 9:00 太平洋标准时间:

这个问题已经产生了很多很好的回应——谢谢。 从回复和我的研究中,我发现我真正想做的事情在 Java 下是不可能的。有一些方法,例如 ddimitrov 的 ServiceLoader 机制可以工作——但它们对于我想要的来说非常繁重,我相信我只是将问题从 Java 代码转移到外部配置文件。 2019 年 5 月 10 日更新(11 年后!)根据@IvanNik 的回答 org.reflections看起来不错,现在有几个库可以帮助解决这个问题。@Luke Hutchison 的答案中的ClassGraph看起来也很有趣。答案中还有更多的可能性。

陈述我想要的另一种方式:我的 Animal 类中的静态函数查找并实例化从 Animal 继承的所有类——无需任何进一步的配置/编码。如果我必须配置,我还不如在 Animal 类中实例化它们。我理解,因为 Java 程序只是 .class 文件的松散联合,所以它就是这样。

有趣的是,这在 C# 中似乎相当微不足道。

0 投票
3 回答
8347 浏览

python - 为什么属性引用在 Python 继承中会这样?

以下看起来很奇怪.. 基本上, somedata 属性似乎在继承自的所有类之间共享the_base_class

self.somedata在函数中定义__init__显然是解决这个问题的正确方法(所以每个类都有自己的somedatadict)——但是什么时候需要这种行为呢?

0 投票
5 回答
12421 浏览

c# - DataGridView 锁定在继承的 UserControl 上

我有一个用户控件,上面有一些预定义的控件(组框、按钮、数据网格视图),这些控件被标记为受保护,组件变量也被标记为受保护。

然后我想从这个基本 UserControl 继承到另一个 UserControl,但是 DataGridView 总是锁定在设计器中。

我怀疑这可能与实现 ISupportInitilize 的 DataGridView 有关。

定义了一个 DataGridView 控件(等)。


DataGridView 控件被锁定


有没有人知道如何在继承后使此控件在设计器中可用?

0 投票
5 回答
14650 浏览

.net - 无法保存实体框架继承的类型

我已经在我的数据模型中实现了一些 table-per-type 继承(基本上有一个BaseEntity包含我的项目的所有基本信息的Employer类型和一个从BaseEntity项目继承的类型)。一切似乎都设置正确,并且在使用实体时(通过 ADO.net 数据服务或通过 Linq to Entities)我可以看到Employer类型并且事情似乎很好。当我创建一个新Employer实体并尝试保存它时,问题就开始了。

在似乎不是.AddToEmployer项目的上下文中(只有 and AddObjector AddToBaseEntity)。

如果我使用AddObject("Employer", NewEmployer),我会收到以下错误消息:

找不到实体集名称“DataEntities.Employer”。

如果我使用AddToBaseEntity(NewEmployer),我会收到以下错误消息:

无法确定相关操作的有效排序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。

我是否错过了设置继承的步骤?是否有一些特定的方法来保存继承的对象?我究竟做错了什么?我认为基本问题是我应该有一个AddToEmployer,我需要做什么才能暴露它?这似乎很奇怪,因为我可以在客户端看到 Employer 类型并且可以执行以下操作:

var NewEmployer = new Employer()- 这似乎表明我可以很好地看到 Employer 类型。

0 投票
2 回答
1781 浏览

python - 在 Django 中,如何使用 Django 的 update_object 通用视图来编辑继承模型的形式?

在 Django 中,给出了应用程序动物的摘录,如下所示:

带有以下内容的动物/模型.py

还有一个动物/urls.py

如何使用通用视图来编辑 Dog 和/或 Cat 使用相同的表单?

即传递给animals/animal_form.html的表单对象将是Animal,因此不会包含派生类Dog 和Cat 的任何细节。我怎么能让 Django 自动将子类的表单传递给animal/animals_form.html

顺便说一句,我使用Djangosnippets #1031进行 ContentType 管理,因此 Animal 将有一个名为as_leaf_class的方法,该方法返回派生类。

显然,可以为每个派生类创建表单,但这是很多不必要的重复(因为模板都是通用的——本质上是 {{ form.as_p }})。

顺便说一句,最好假设 Animal 可能是具有相同问题的几个不相关的基类之一,因此理想的解决方案将是通用的。

预先感谢您的帮助。

0 投票
12 回答
18570 浏览

inheritance - 面向对象的最佳实践——继承 v 组合 v 接口

我想问一个关于如何处理简单的面向对象设计问题的问题。对于解决这种情况的最佳方法,我有一些自己的想法,但我很想听听 Stack Overflow 社区的一些意见。相关在线文章的链接也值得赞赏。我正在使用 C#,但问题不是特定于语言的。

假设我正在编写一个视频商店应用程序,其数据库有一个Person表,其中包含、PersonIdName字段。它还有一个表,它有一个链接到 a ,还有一个表也链接到。DateOfBirthAddressStaffPersonIdCustomerPersonId

一个简单的面向对象的方法是说Customer“是” Person,因此创建类有点像这样:

现在我们可以编写一个函数来向所有客户发送电子邮件:

这个系统运行良好,直到我们有一个既是客户又是员工的人。假设我们真的不希望我们的everyone列表中有两次相同的人,一次作为 aCustomer一次作为 a Staff,我们是否可以在以下之间做出任意选择:

显然只有这两个中的第一个不会破坏该SendEmailToCustomers功能。

那你会怎么做?

  • 使类具有对 a和类Person的可选引用?StaffDetailsCustomerDetails
  • 创建一个新类,其中包含一个Person,加上可选StaffDetailsCustomerDetails
  • 让所有东西都成为一个接口(例如IPerson, IStaff, ICustomer)并创建三个实现相应接口的类?
  • 采取另一种完全不同的方法?
0 投票
8 回答
1109 浏览

inheritance - 我应该继承 List还是将其作为财产?

在过去的几个月里,我经常遇到这个问题,在此期间我一直在构建这个系统。场景是这样的:我有这种对象,它本质上是其他对象的列表,但具有一些其他特定于其性质的属性。例如:

  • Tests
    • 包含许多Test对象
    • 有属性:
      • DefaultTimeouts
      • DefaultNumberOfTries

我应该有这个类的子类List<Test>还是应该让它继承自Object,只是将列表作为其他字段旁边的属性?

我知道这可能有点主观,个人品味可能会在这里起作用,但我非常想知道您对此的看法。

0 投票
11 回答
65435 浏览

java - 在 Java 中禁止继承的充分理由?

在 Java 中禁止继承的充分理由是什么,例如使用最终类或使用单个私有无参数构造函数的类?使方法成为最终方法的充分理由是什么?

0 投票
7 回答
3057 浏览

c# - C#:使用 myObj.ToString() 时强制编译器错误

我有一个包含一堆属性的类。如果程序员在该类型的对象上调用 ToString() 是错误的。以这个示例代码为例:

您可以推断,如果大多数人希望将 ID 写为字符串,那么我应该实现 ToString 以便它返回 ID。但是,我认为这是一种不好的做法,因为程序员会“意外”获得工作代码。使用我的类的程序员应该指定他们想要什么。

相反,我想要的是如果有人调用 myObj.ToString() 以使其显示为编译时错误。我想我可以通过创建一个私有的 ToString() 函数来做到这一点,但这不起作用。

我提出这个问题的原因是我们最终得到了一个包含完全限定类名而不是 ID 的查询字符串。

所以问题是:有没有办法“隐藏” ToString() 函数,以便在我的类的对象上调用它会导致编译器错误?