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

nhibernate - 使用 Fluent NHibernate 进行继承映射

鉴于以下场景,我想使用 Fluent NHibernate 将类型层次结构映射到数据库模式。

我正在使用 NHibernate 2.0


类型层次结构

看图片

ItemSubItem类是抽象的。


数据库模式

看图片

ItemType字段确定具体类型。

表中的每条记录在ConcreteItemX表中都有一条对应的记录Item;对于ConcreteItemY桌子也是如此。

FieldB如果项目类型为 ,则始终为空ConcreteItemY


映射(到目前为止)

FieldB未映射。


问题

如何使用 Fluent NHibernate 映射类的FieldB属性?SubItem

有什么方法可以利用DiscriminateSubClassesOnColumnItemType字段吗?


附录

我能够使用 hbm.xml 文件达到预期的效果:

如何使用 Fluent NHibernate 完成上述映射?

是否可以使用 Fluent NHibernate 将每类层次结构表与每子类表混合?

0 投票
11 回答
58339 浏览

c# - 什么是阴影?

在 C# 中,术语阴影是什么意思?我已阅读此链接,但没有完全理解。

0 投票
5 回答
21404 浏览

c# - 根据子类从基类指定抽象方法的返回类型

我有以下结构:

我想创建一个抽象方法,它返回具体子类是什么类。因此,正如您从示例中看到的那样, in 中的方法SubOne应该返回List<SubOne>,而 in 中的方法SubTwo应该返回List<SubTwo>

我在基类中声明的签名中指定什么类型?


[更新]

感谢您发布的答案。

解决方案是使抽象类通用,如下所示:

0 投票
9 回答
3310 浏览

c# - C# 与 C++ 中的虚拟调用速度

我似乎记得在某处读到过,相对而言,C# 中的虚拟调用的成本不如 C++ 中的高。这是真的?如果是这样 - 为什么?

0 投票
1 回答
5991 浏览

c# - Polymorphism in WCF

I'm looking at building a WCF service that can store/retrieve a range of different types. Is the following example workable and also considered acceptable design:

When using the service, I would need to be able to pass the child types into the StoreObject method and get them back as their Child type from the RetrieveObject method.

Are there better options?

Thanks, Rob

0 投票
5 回答
1564 浏览

c# - C# - 在我没有编写的类中使用多态性

在我无法修改的类中实现多态行为的最佳方法是什么?我目前有一些代码,例如:

显而易见的答案是在基类中添加一个虚拟方法,但不幸的是代码在不同的程序集中,我无法修改它。有没有比上面丑陋而缓慢的代码更好的方法来处理这个问题?

0 投票
2 回答
1020 浏览

functional-programming - 如何在标准 ML 中打印多态值?

有没有办法在标准 ML(特别是 SML/NJ)中打印多态值?我有一个多态函数没有做我想要的,并且由于在 SML 中调试的糟糕状态(请参阅调试生产功能程序的任何真实世界经验?),我想看看它在做什么旧print的。一个简单的例子是(在提示下):

其他建议表示赞赏。与此同时,我将继续盯着有问题的代码提交。

更新

我能够找到错误,但问题仍然存在于防止未来痛苦和痛苦的希望中。

0 投票
5 回答
63126 浏览

python - 使用不同的类型和消息重新引发异常,保留现有信息

我正在编写一个模块,并希望对它可以引发的异常有一个统一的异常层次结构(例如,从FooError抽象类继承所有foo模块的特定异常)。这允许模块的用户捕获那些特定的异常并在需要时清楚地处理它们。但是从模块中引发的许多异常都是由于其他一些异常而引发的;例如,由于文件上的 OSError 导致某些任务失败。

我需要的是“包装”捕获的异常,使其具有不同的 type 和 message,以便通过捕获异常的任何内容在传播层次结构中进一步获取信息。但我不想丢失现有的类型、消息和堆栈跟踪;对于试图调试问题的人来说,这些都是有用的信息。顶级异常处理程序不好,因为我试图在异常进一步向上传播堆栈之前装饰异常,而顶级处理程序为时已晚。

这部分通过foo从现有类型(例如class FooPermissionError(OSError, FooError))派生我的模块的特定异常类型来解决,但这并没有使将现有异常实例包装在新类型中变得更容易,也没有修改消息。

Python 的PEP 3134 “异常链接和嵌入式回溯”讨论了 Python 3.0 中接受的“链接”异常对象的更改,以表明在处理现有异常期间引发了新异常。

我正在尝试做的是相关的:我需要它也可以在早期的 Python 版本中工作,而且我不需要它用于链接,而仅用于多态性。这样做的正确方法是什么?

0 投票
3 回答
10563 浏览

c++ - 如何将不同的模板类型放入一个向量中

我想构造一条长度或参数数量未知的消息。我拿了一个简单的模板,比如

并且有一些重载

(对于字符串等也是如此)我尝试将其全部推入一个向量中。我试过

但这似乎没有任何作用。有没有办法做到这一点?提前致谢。

0 投票
4 回答
4082 浏览

c# - C# ToString 继承

我有一个问题(这是我的错,我只是无法发现我做错了什么)“ToString”没有调用正确的方法......

我从“ClassB”而不是“ClassA”得到“ToString”我做错了什么?