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

c++ - 什么更快:从虚拟基地向下投射或交叉投射?

这有点假设,因为我不太担心性能 - 只是想知道哪个选项实际上是最快/最有效的,或者是否没有任何区别。

假设我有以下代码用于支持重载的访问者模板:

然后将其用于创建通用访问者:

使用访问者最终会导致dynamic_cast<>'s from Visitorto VTarget<T>,这是一个交叉转换。

可以实现的另一种方式是创建Visitor一个虚拟基础VTarget<T>-MyVisitor然后不再需要直接从访问者继承。dynamic_cast<>Visitor::visit 代码中的Visitor.

执行强制转换时,一种方法比另一种方法快吗?或者您是否只因拥有虚拟基地而受到规模损失?

0 投票
2 回答
3193 浏览

c# - 使用实体框架向下转型

我有一个项目,我在 EF 中将其定义EmployerUser. 在我的过程中,我创建了一个用户,但不知道它最终是否会成为雇主(或其他类型的用户),然后我需要转换它。起初我试过(智能感知表明存在显式转换):

但在运行时我得到:

所以我试着写一个转换器:

但我得到了错误:

美好的。然后我像这样重载了构造函数Employer

并认为我可以这样做:

但是当我运行它时,我得到了错误:

作为最后的手段,我试着写这个:

... GetUser() 返回一个User不提供的类型的对象,.Cast<>所以我使用直接查询来到达那里...但我仍然得到动态代理对象异常的强制转换。

所以我的问题是:当对象通过 EF 具有持久性时,我怎么能沮丧?

0 投票
6 回答
20019 浏览

c++ - 为什么涉及虚拟继承时不能使用static_cast进行向下转换?

考虑以下代码:

这是标准 ( [n3290: 5.2.9/2]) 所禁止的,因此代码无法编译,因为Derived 实际上继承自Base. virtual从继承中删除使代码有效。

这条规则存在的技术原因是什么?

0 投票
2 回答
1343 浏览

c# - 接口向下转换

请假设我有以下扩展方法,以便能够强制评估IEnumerable

我想问一下是否有任何意义,IList<T>而不是List<T>作为此方法的返回类型(即向下转换为接口),以便既不将其及其依赖项绑定到特定实现(即使返回值实际上总是一List)。

0 投票
2 回答
77 浏览

java - 真实类型的使用方法

我了解到我可以使用 Object 的真实类型来定义使用哪个 Method,例如:

现在它应该采用该bla(String x)方法,但我得到了编译器错误。我知道为什么:因为foo当前的类型是Object. 我不确定我目前是否正确,但我是这样理解的,Java 将通过真实类型(或特定类型)选择方法,所以如果我将其向下转换为Object,它将String选择Object方法已指定。

或者是在方法中确定类型的唯一if(foo instanceof xxx)方法void bla(Object x)?

PS:不要误会我的意思:我不是说我可以重载方法,我的意思是我要根据真实类型(而不是定义的类型)选择方法!

0 投票
1 回答
455 浏览

actionscript-3 - Actionscript 3.0 类型向下转换问题

我已经实现了一个扩展 MovieClip 的新类。它的名字是base.MovieClipWithDelays(“base”这里是一个包名)。

我的场景包含一个名为Blah. 在Symbol Properties我检查Export for ActionScriptExport in first frame复选框。我将类名设置为T_Idle_0. 我将它的基类指定为base.MovieClipWithDelays.

问题是以下代码导致类型错误:

它输出:

如您所见,它的超类名称是可以的。然而,它并没有失望。这怎么可能,我该如何解决?

0 投票
3 回答
2570 浏览

c++ - 为什么只允许多态类使用从基到派生的动态转换

可能重复:
常见问题解答:为什么 dynamic_cast 仅在类具有至少 1 个虚拟方法时才有效?

我在 C++ 中读过,在一组类的层次结构中执行动态转换,只有在类是多态的情况下才允许转换,例如当基类具有虚函数时等。什么是这种限制的原因是什么?在基类中使用纯虚函数代替普通虚函数是否更“安全”?

谢谢你!

0 投票
3 回答
402 浏览

java - Java 向下转型

嗨,有一堂这样的课

然后是 Message 类

和一个子类

在我的代码中,我有这个:

它给了我这个错误:

Exception in thread "main" java.lang.ClassCastException: Message cannot be cast to SMS

我不能将消息向下转换为 SMS,以便我可以使用 SMS showMessage() 方法吗?

0 投票
2 回答
8240 浏览

c++ - 将对象(不是指针)向下转换为已知的派生类型是否安全?

会不会有切片的危险

在哪里

并且obj1确定obj2Block对象?

我很想使用:

但是在阅读 SO 对对象切片标签的简要描述时,我很想使用前者。但我真的不想要任何讨厌的无声切片。

0 投票
3 回答
2493 浏览

c++ - 避免消息传递中向下转换的设计模式

基类MessageHandler有派生类。他们想互相传递信息。消息可以属于不同的类,但可以共享一个基类。每个人如何MessageHandler避免向下转换收到的消息?是否有可能做一些具有模板参数化receiveMessageMessageHandler 上的虚函数的效果的事情?

本质上,我正在尝试用不会向下转换的代码替换以下代码,并且希望是编译时的事情:

我知道我不能这样做,但是像

并且每个人都有DerivedMessageHandler专攻M?什么样的设计模式可以清晰地让每个处理程序处理其支持的消息对象?