168得票6回答
将基类转换为派生类

在C#中,是否可以将一个基类对象明确转换为其派生类之一?我当前的想法是创建一个接受基类对象作为参数并复制属性值的派生类构造函数。但我不太喜欢这个想法,如果有可能的话,我想避免使用它。 这似乎不应该起作用(对象被实例化为新的基类,因此不应为派生类的额外成员分配内存),但是C#似乎允许我这样做:...

160得票9回答
关于类变量,向上转型和向下转型有什么区别?

向上转型和向下转型在类变量方面有什么区别? 例如,在以下程序中,Animal类仅包含一个方法,但Dog类包含两个方法,那么我们如何将Dog变量强制转换为Animal变量。 如果进行转换,那么我们如何使用Animal的变量调用Dog的另一个方法。class Animal { publ...

113得票33回答
可以使用显式类型转换将基类对象分配给派生类引用吗?(涉及IT技术)

在C#中,是否可以使用显式类型转换将基类对象分配给派生类引用? 我尝试过这样做,但会导致运行时错误。

104得票6回答
下转型和上转型

我刚开始学习 C#(以及 OOP)。当我有以下类似代码时:class Employee { // some code } class Manager : Employee { //some code } 问题 1:如果我有其他代码执行以下操作: Manager mgr ...

103得票9回答
在Swift中将可选项向下转换:使用as? Type还是as! Type?

在 Swift 中给定以下内容:var optionalString: String? let dict = NSDictionary() 以下两个语句有何实际区别:optionalString = dict.objectForKey("SomeKey") as? String 对比optio...

85得票3回答
如何将std::shared_ptr向下转型?

请考虑: struct SomethingThatsABase { virtual bool IsChildOne() const { return false; } virtual bool IsChildTwo() const { return false; } }; ...

73得票7回答
C++无法通过虚拟基类A将基类A转换为派生类型B

我有四个类:class A {}; class B : virtual public A {}; class C : virtual public A {}; class D: public B, public C {}; 尝试将A*静态转换为B*时,我收到以下错误消息:cannot co...

57得票3回答
在C++中,什么情况下进行向上转型是不合法的?

我相信我清楚地理解了在C++中上转换和下转换之间的一般区别。 我知道我们不能总是下转换,因为将基类指针转换为派生类指针将假定被指向的基类对象具有派生类的所有成员。 在这学期早期,我的教授告诉我们有时在C++中进行上转换也是不合法的,但是我在笔记中错过了原因,并且我记不得发生这种情况的时间。 ...

54得票6回答
当涉及虚继承时,为什么不能使用static_cast进行向下转型?

请提供需要翻译的完整内容,我才能开始翻译。struct Base {}; struct Derived : public virtual Base {}; void f() { Base* b = new Derived; Derived* d = static_cast&l...

40得票5回答
将当前对象($this)转换为一个子类

我有一个类,可能需要在后面的某个时候将对象更改为一个更具体的子类。这是可能的吗?我知道一种选项是返回一个使用子类替代的副本,但实际上修改当前对象会更好……所以:class myClass { protected $var; function myMethod() { //...