问题标签 [downcast]

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 回答
840 浏览

c++ - 如何在 C++Builder2009 中正确地将指针从 void* 向下转换为 TMemo*?

我在 C++Builder 2009 中编写多线程套接字聊天。
按照我需要做的,它几乎完成了,但我有一个小问题。我需要将 TMemo* 指针传递给 CreateThread WinAPI 函数,该函数将其向上转换为 void*。

我试过这样:

然后,在 NetThread 函数中,

但它没有工作:(

问题是我如何才能真正正确地向下转换它,以便我可以在这个新线程中使用我的备忘录组件?

0 投票
4 回答
1707 浏览

c# - 是否有可能避免沮丧?

我有一些逻辑,它定义和使用一些用户定义的类型,比如:

逻辑在使用类型进行计算(例如定位每个Word实例)之后,间接使用一些SystemAPI,例如通过调用Canvass.draw方法。

我想让这个逻辑独立于System.Drawing命名空间:主要是为了帮助进行单元测试(我认为单元测试的输出会更容易验证该draw方法是否绘制到真实System.Drawing.Graphics实例之外的东西)。

为了消除逻辑对命名空间的依赖System.Drawing,我想我会声明一些新接口作为System.Drawing类型的占位符,例如:

如果我这样做了,那么不同的程序集可能有不同的IMyFontandIMyGraphics接口实现,例如......

...但是,如上图所示,实现将需要向下转换。

我的问题是,有没有一种方法可以做到这一点而无需在实施过程中感到沮丧?Word通过“这个”,我的意思是“定义像并且Canvass不依赖于特定具体类型的UDT System”?

另一种选择是抽象 UDT ...

...但这也需要在子类的实现中进行向下转换。

我也想过使用双重调度习惯,但这取决于命名 API 中的各种子类。

或者,如果没有接口或子类,有没有使用委托的方法?


- 编辑: -

有两种可能的答案。

一个答案是使用泛型,正如下面“兰蒂斯爵士”的回答所建议的那样,以及 John Skeet 链接到的博客文章所建议的那样。我怀疑这在大多数情况下都可以正常工作。从我的角度来看,不利的一面是它意味着TFont作为模板参数引入:它不仅是一个类Word(包含一个Font实例),它需要成为一个泛型类(如WordT<TFont>)......这也是任何包含WordT<TFont>(eg Paragraph) 的类现在也需要成为具有TFont参数 (eg ParagraphT<TFont>) 的泛型。最终,程序集中的几乎每个类都变成了泛型类。这确实保留了类型安全性并避免了向下转换的需要......但是它有点难看,并且扰乱了封装的错觉(“字体”是不透明的实现细节的错觉)。

另一个答案是在用户类中使用地图或字典。而不是Font在可重用库中,而不是抽象接口,定义一个“句柄”类,如:

然后,不要从 向下转换,而是FontHandle保留一个将值Dictionary<int, Font>映射到实例的实例。FontHandleFont

0 投票
3 回答
84229 浏览

objective-c - 在 Objective-C 中,Java 的“instanceof”关键字等价于什么?

我想检查一个对象(例如someObject)是否可分配(可转换)给另一种类型的变量(例如SpecifiedType)。在 Java 中,我可以写:

一个相关的问题是查找对象的运行时类型是否等于另一种类型。在 Java 中,我可以写:

如何在 Objective-C 中做到这一点?

0 投票
6 回答
2904 浏览

c# - 如何改变这种设计以避免沮丧?

假设我有一个对象集合,它们都继承自一个基类。就像是...

现在,我们需要喂养这些动物,但不允许它们知道如何喂养自己。如果可以,答案将很简单:

然而,他们不知道如何养活自己,所以我们想做这样的事情:

当然,这不会编译,因为它会迫使一个沮丧。

感觉好像有一种设计模式或其他一些带有泛型的解决方案可以帮助我解决这个问题,但我还没有把手指放在它上面。

建议?

0 投票
30 回答
143138 浏览

c# - 是否可以使用显式类型转换将基类对象分配给派生类引用?

是否可以在 C# 中使用显式类型转换将基类对象分配给派生类引用?

我已经尝试过了,它会产生运行时错误。

0 投票
11 回答
6911 浏览

c# - C#中的向下转换

我面临一个我不知道如何解决的问题,希望社区可以提供帮助。

我正在编写一个管理“Lead”对象的应用程序。(这些是销售线索。)我的程序的一部分将从文本文件中导入线索。现在,文本文件包含许多潜在的潜在客户,其中一些我想要导入,而另一些我不想导入。

为了便于编程(和使用),我将文本文件解析为 List<Lead> 对象,并使用 DataGridView 通过设置 DataGridView 的 DataSource 属性来显示潜在客户。

我想要做的是在网格中添加一个名为“导入”的列,并带有一个复选框,用户可以选中该复选框以指示是否应导入每个潜在客户。

我的第一个想法是从 Lead 派生一个类:

p>

但是,解析引擎会返回 Lead 对象的列表。我不能将潜在客户转换为 LeadWithImportCheckbox。这失败了:

这是一个无效的演员表。

我看到的另一个选项是为 LeadWithImportCheckbox 创建一个构造函数:

这是有问题的,原因有两个。一,Lead 对象有几十个属性,编写这个构造函数是一个 PITA。

但更糟糕的是,如果我更改了 Lead 的底层结构,我需要记得返回并更改 LeadWithImportCheckbox 的构造函数。这对我的代码维护是一个危险。

有没有更好的方法来实现我的目标?

0 投票
2 回答
952 浏览

c# - 构造函数中的基对象作为向下转换的替代方法

我有一个基础对象列表 (RTUDevice) 并希望遍历并将每个对象转换为派生对象(实际上是派生 RTDSensor 的派生对象),但是向下转换会引发错误。

将构造函数中的基础对象传递给 RTDSensor 会更好吗

或者是我的 OOP 设计偏离了标准。

0 投票
3 回答
1960 浏览

java - 为什么我们可以将 Java 接口强制转换为 *any* 非最终类?

在上面的代码示例中,我将一个集合对象转换为一个 Test 对象。(忽略空指针)。Test与 Collection没有任何关系,但该程序将通过所有编译时检查。

我想知道这是为什么。我的假设是接口被忽略是因为它们太复杂了。它们没有通用的超类型,每个类都可以实现多个接口,所以类/接口层次结构太复杂而无法有效搜索?

除了这个原因,我很困惑。有人知道吗?!

0 投票
6 回答
117247 浏览

c# - 垂头丧气

我是C#(和OOP)的新手。当我有如下代码时:

问题 1:如果我有其他代码可以做到这一点:

Employee是 a Manager,但是当我像这样将它转换为 anEmployee时,这意味着我正在向上转换它吗?

问题 2

当我有几个Employee类对象并且其中一些但不是全部是Manager's 时,我怎样才能在可能的情况下向下转换它们?

0 投票
1 回答
4399 浏览

oop - 向下转换参考对象时导致 MOVE_CAST_ERROR 的原因是什么?

我正在创建一个从具有受保护实例化的父类继承的类。超类有一个提供类实例的静态方法。

以下代码导致运行时错误MOVE_CAST_ERROR

我也试过:

我过去曾成功地对其他对象类型进行了向下转换 - 有没有人知道在 ZPARENT 或 ZCHILD 中寻找什么可能会使这两个类不兼容?

目前ZCHILD只有一个额外的方法,如果添加到超类中会破坏类的抽象,所以我不太热衷于这样做。