-1

将派生类的方法强制转换为派生类后,如何使用它。

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

4

1 回答 1

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,只需将星号 (*) 替换为帽子 (^)。

于 2013-10-03T15:56:14.167 回答