如何在继承链的中间插入类?

时间:2018-02-16 19:53:30

标签: c# inheritance xamarin xamarin.forms

我有如下课程,其中A:B表示A继承自B:

GatewayBaseActivity:SDKBaseActivity:AppCompatActivity

FormsAppCompatActivity:AppCompatActivity

我如何创建它所以我有一个具有GatewayBaseActivity的所有功能的类,而是继承如下:

GatewayBaseActivity:SDKBaseActivity:FormsAppCompatActivity:AppCompatActivity

基本上将HeritageAppCompatActivity保留在遗产树中的SDKBaseActivity和AppCompatActivity之间。

这些课程都来自Xamarin,Android和Airwatch。如果不重写一半的课程,最好的方法是什么?

2 个答案:

答案 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

但工作的复杂性和时间量可以采取,特别是与你所说的相比,重写了一半的课程"很大程度上取决于您的设计目的我会说,在继承链中注入外来类的必要性指向糟糕的设计。因此,如果您确实需要结合这些类的功能,我建议考虑设计和使用接口。