如何在没有复制粘贴的情况下以相同的方式扩展两个类?

时间:2009-06-19 13:04:51

标签: c# .net

我写了一个所有者绘制的TabControl,但我们的项目也使用TabWorkspace来自TabControl。目前,我已经

public class OurTabControl : TabControl
{
     // some code that overrides protected methods
}

public class OurTabWorkspace : TabWorkspace
{
    // the same code
}

我只想让共享代码出现在一个地方,所以我们不必保留两份副本。这可能在C#中,如果是这样,怎么样?

4 个答案:

答案 0 :(得分:8)

您可以使用界面并编写扩展方法。

class OurTabControl: IBehavior
class OurTabWorkspace: IBehavior

interface IBehavior
{    
}

static class BehaviorExtensions
{
   static [returntype] RepeatedBehavior(this IBehavior behavior)
   {
       //repeated code here
   } 
}

答案 1 :(得分:1)

也许将共享代码重构为一组静态方法?

答案 2 :(得分:1)

您可以创建一个包含公共代码的内部帮助器类,并将其作为OurTabControl和OurTabWorkspace中的私有成员引用。由于TabWorkspace扩展了TabControl,您应该能够利用多态性并将TabControl参数传递给helper类中的方法。您仍然需要覆盖两个扩展类中的任何常用方法,并从那里调用辅助类方法和/或基本方法。

答案 3 :(得分:0)

使用分部课怎么样? 或者,如何在一个类中定义所有共享方法,并让两个继承类实例化它。