在将其强制转换为派生类后,如何使用派生类的方法。
public class BaseClass
{
public virtual void DoSomething()
{
Trace.Write("base class");
}
}
public class DerivedClass : BaseClass
{
public override void DoSomethingElse()
{
Trace.Write("derived class");
}
}
我希望能够致电
BaseClass B ( (BaseClass*) new DerivedClass());
B.DoSomethingElse();
我出于不同的原因需要B cast作为BaseClass ...我可以立即获得名为C的派生类,然后将其转换为BaseClass并对同一时刻有两个不同的引用吗?
答案 0 :(得分:2)
看起来你正在使用C#,但无论如何都是一样的想法。您必须将对象强制转换为所需方法所在的类型。考虑(以下是C ++):
BaseClass* b = new DerivedClass( );
b->DoSomethingElse( ); // fails because this method doesn't exist for BaseClass
((DerivedClass*)b)->DoSomethingElse( ); // works because it's cast to the correct type
C#示例:
BaseClass b = new DerivedClass( );
b.DoSomethingElse( ); // fails because this method doesn't exist for BaseClass
(b as DerivedClass).DoSomethingElse( ); // works because it's cast to the correct type
对于您的详细信息,您可以将其转换为另一种类型并将其分配给不同的局部变量,以便将相同的实例视为两种不同的类型。因此,您可以为对象指定一个(类型为BaseClass的指针),并为对象指定另一个指针(类型为DerivedClass)。这完全有效。考虑:
C ++:
BaseClass* b;
DerivedClass* c;
b = c = new DerivedClass( );
c->DoSomethingElse( ); // totally works
C#:
BaseClass b;
DerivedClass c;
b = c = new DerivedClass( );
c.DoSomethingElse( ); // totally works
[编辑]:如果你正在使用C ++ / CLI,只需用帽子(^)替换星号(*)。