草庐IT

downcast

全部标签

c# - 将基类转换为派生类

这个问题在这里已经有了答案:Isitpossibletoassignabaseclassobjecttoaderivedclassreferencewithanexplicittypecast?(31个答案)关闭9年前。在C#中是否可以将基类对象显式转换为它的派生类之一?目前认为我必须为我的派生类创建一个构造函数,它接受一个基类对象作为参数并复制属性值。我不太喜欢这个想法,所以我想尽可能避免它。这似乎不应该起作用(对象被实例化为新基,因此不应为派生类的额外成员分配内存)但C#似乎允许我这样做:classBaseClass{...somestuff...}classDerivedClas

php - 将当前对象 ($this) 转换为子类

我有一个类,可能需要将对象更改为更进一步的后代类。这可能吗?我知道一种选择是返回它的副本,但改用子类,但实际上修改当前对象会很好......所以:classmyClass{protected$var;functionmyMethod(){//functionwhichchangestheclassofthisobjectrecast(myChildClass);}}classmyChildClassextendsmyClass{}$obj=newmyClass();$obj->myMethod();get_class_name($obj);//=>myChildClass

php - 将当前对象 ($this) 转换为子类

我有一个类,可能需要将对象更改为更进一步的后代类。这可能吗?我知道一种选择是返回它的副本,但改用子类,但实际上修改当前对象会很好......所以:classmyClass{protected$var;functionmyMethod(){//functionwhichchangestheclassofthisobjectrecast(myChildClass);}}classmyChildClassextendsmyClass{}$obj=newmyClass();$obj->myMethod();get_class_name($obj);//=>myChildClass

c++ - 私有(private)范围内私有(private)继承的动态向下转换

对thisquestion的调整我遇到的。考虑:classA{};classB:privateA{staticvoidfoo();};voidB::foo(){B*bPtr1=newB;A*aPtr1=dynamic_cast(bPtr1);//givespointerB*bPtr2=dynamic_cast(aPtr1);//givesNULL}因为aPtr1实际上属于B*类型,并且我们可以完全访问B及其继承自A,我希望这两个Actor都能工作。但他们没有;为什么?还有其他方法可以实现这种Actor吗?注意:如果foo()不是B的成员,则两个强制转换都会失败。如果B公开继承自A,则两

c++ - 私有(private)范围内私有(private)继承的动态向下转换

对thisquestion的调整我遇到的。考虑:classA{};classB:privateA{staticvoidfoo();};voidB::foo(){B*bPtr1=newB;A*aPtr1=dynamic_cast(bPtr1);//givespointerB*bPtr2=dynamic_cast(aPtr1);//givesNULL}因为aPtr1实际上属于B*类型,并且我们可以完全访问B及其继承自A,我希望这两个Actor都能工作。但他们没有;为什么?还有其他方法可以实现这种Actor吗?注意:如果foo()不是B的成员,则两个强制转换都会失败。如果B公开继承自A,则两

java - 如何向下转换 Java 对象?

我正在尝试理解Java的多态性,并且我有一个关于向下转换对象的问题。假设对于这个例子,我有两个继承自父类(superclass)Animal的子类Dog和Cat据我了解,向下转换对象的唯一方法是该对象已经是好的类型,如下所示:Animala=newDog();Dogd=(Dog)a;这行得通吗?但是如果我想在不知道它会是什么的情况下创建一个普通的动物,然后在我知道的时候施放它,我该怎么做呢?Animala=newAnimal();Dogd=(Dog)a;这会在运行时抛出ClassCastException对吗?我发现这样做的唯一方法是创建一个新的Dog构造函数,该构造函数从普通动物创建

java - 如何向下转换 Java 对象?

我正在尝试理解Java的多态性,并且我有一个关于向下转换对象的问题。假设对于这个例子,我有两个继承自父类(superclass)Animal的子类Dog和Cat据我了解,向下转换对象的唯一方法是该对象已经是好的类型,如下所示:Animala=newDog();Dogd=(Dog)a;这行得通吗?但是如果我想在不知道它会是什么的情况下创建一个普通的动物,然后在我知道的时候施放它,我该怎么做呢?Animala=newAnimal();Dogd=(Dog)a;这会在运行时抛出ClassCastException对吗?我发现这样做的唯一方法是创建一个新的Dog构造函数,该构造函数从普通动物创建

c++ - C++11 中 boost::shared_polymorphic_downcast 的 std 等价物在哪里?

boost::shared_polymorphic_downcast和另一个boost::shared_ptr功能位于我最近使用-std=c++0x在GCC中启用了对C++11的支持.为了避免混淆,我从boost::shared_ptr搬过来了至std::shared_ptr位于#include.但是看起来shared_polymorphic_downcast不是std的一部分命名空间,不包含在#include中.你知道它在哪里吗?我错过了弃用备忘录吗;-) 最佳答案 您需要std::static_pointer_cast或std:

swift - 什么是 Swift 中的桥接转换,如以下警告 : Conditional downcast from 'Data?' to 'CKRecordValue is a bridging conversion

什么是Swift中的桥接转换?“桥接”是什么意思?我在下面的代码中收到一条警告,其中我用注释“//warning”进行了标记:importUIKitimportCloudKitletint:UInt8=1letdata:Data?=Data([int])letrecord:CKRecord=CKRecord(recordType:"record_type")record.setObject(dataas?CKRecordValue,forKey:"field")//warning警告说:Conditionaldowncastfrom'Data?'to'CKRecordValue'(ak

c++ - 符合标准的编译器可以拒绝包含来自非多态类型的 dynamic_cast downcast 的代码吗?

这个问题的灵感来自评论here.考虑以下代码片段:structX{};//novirtualmembersstructY:X{};//mayormaynothavevirtualmembers,doesn'tmatterY*func(X*x){returndynamic_cast(x);}一些人建议他们的编译器会拒绝func的正文.但是,在我看来,这是否由标准定义取决于x的运行时值。.来自第5.2.7节([expr.dynamic.cast]):Theresultoftheexpressiondynamic_cast(v)istheresultofconvertingtheexpres