我有三个互动如下的类。 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
时,您无需从ClassBInterface1
到ObjectC.Bar
进行显式转换,因为编译器会为您完成此操作。
如果class B
定义如下:
ClassB : public ClassBInterface1, ClassBInterface2
{
/*Class methods and attributes*/
}
您可以在ObjectC上调用Bar函数时执行以下操作(假设
objectB
被定义为ClassB
)ObjectC.Bar(ObjectB);