我有如下课程,其中A:B表示A继承自B:
GatewayBaseActivity:SDKBaseActivity:AppCompatActivity
和
FormsAppCompatActivity:AppCompatActivity
我如何创建它所以我有一个具有GatewayBaseActivity的所有功能的类,而是继承如下:
GatewayBaseActivity:SDKBaseActivity:FormsAppCompatActivity:AppCompatActivity
基本上将HeritageAppCompatActivity保留在遗产树中的SDKBaseActivity和AppCompatActivity之间。
这些课程都来自Xamarin,Android和Airwatch。如果不重写一半的课程,最好的方法是什么?
答案 0 :(得分:2)
给出以下层次结构:
class A { }
class B: A { }
class D: B { }
class E: D { }
在对象中插入一个C
课程非常简单;你只需要修改D
。
class C: B { }
class D: C { }
如果您不拥有D
且无法访问和更改其实施,那么您无能为力;你不能改变第三方实现的基类。
答案 1 :(得分:1)
您建议实现经典的多继承。在C#(和许多其他语言)中,应该通过声明和实现多个接口来替换范例。所以,
你可以定义一些常见的(对于你提到的所有类)抽象接口,并在你想要的类中实现它。
或者您可以为FormsAppCompatActivity定义接口并在继承链GatewayBaseActivity中实现它 - > SDKBaseActivity
但工作的复杂性和时间量可以采取,特别是与你所说的相比,重写了一半的课程"很大程度上取决于您的设计目的我会说,在继承链中注入外来类的必要性指向糟糕的设计。因此,如果您确实需要结合这些类的功能,我建议考虑设计和使用接口。