Class 在基类强制转换后使用派生类中的方法

Class 在基类强制转换后使用派生类中的方法,class,Class,在将派生类的方法强制转换到其派生类后,如何使用该方法 public class BaseClass { public virtual void DoSomething() { Trace.Write("base class"); } } public class DerivedClass : BaseClass { public override void DoSomethingElse() { Trace.Write("derived class");

在将派生类的方法强制转换到其派生类后,如何使用该方法

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转换为基类……我可以拥有一个名为C的派生类的瞬间,然后将其转换为基类,并对同一瞬间有两个不同的引用吗?

看起来你在使用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++:

C:


编辑[]:如果你使用C++ + CLI,用帽子^替换星号*。< /p>这不是C++代码,我没有意识到我在这里混合C代码。

BaseClass* b;
DerivedClass* c;
b = c = new DerivedClass( );
c->DoSomethingElse( ); // totally works
BaseClass b;
DerivedClass c;
b = c = new DerivedClass( );
c.DoSomethingElse( ); // totally works