我有三个互动如下的类。 Class A包含类型为Class B的私有成员。它还包含一个将ClassC类型的对象传递给的方法。然后,此方法调用ClassC上的方法,并将其类型为ClassBInterface1的成员的特定接口(ClassB)传递给该方法:

 ClassA
 {
     void Foo(ClassC ObjectC)
     {
         ObjectC.Bar((ClassBInterface1) ObjectB);
     }
     ClassB ObjectB;
 }


我的问题是:ClassA不需要访问ClassB中定义的Interface1方法。因此,在我看来,如果ClassA的成员类型为ClassBInterface2,而不是ClassB,那将更加优雅。是否仍可以在Interface1下将B传递给C的同时这样做?

我能想到的唯一方法是在ClassBInterface2的Bar方法中将ClassB转换为ClassBInterface1并返回到ClassA

这是最好的方法吗?还是应该保留原样?

非常感谢您的帮助。

最佳答案

如果将ObjectB定义为ClassBInterface2,则将无法在运行时将其转换为ClassBInterface1,因为它的内部结构未知。

您的方式是最好的方式,但是您可以做一些修改。调用ClassB时,您无需从ClassBInterface1ObjectC.Bar进行显式转换,因为编译器会为您完成此操作。

如果class B定义如下:

ClassB : public ClassBInterface1, ClassBInterface2
{

  /*Class methods and attributes*/

}


您可以在ObjectC上调用Bar函数时执行以下操作(假设objectB被定义为ClassB

ObjectC.Bar(ObjectB);

10-07 15:58