避免代码重复而不使用多重继承

时间:2013-01-02 06:28:46

标签: c# .net visual-studio-2010 multiple-inheritance

class A : N
{
     void sinefunc()
     {
           //some stuff here
     }
}

class B : N
{

    void sinefunc()
    {
        //some stuff here
    }
}

class C : N
{ 
    void sinefunc()
    {
         //some stuff here
    }
}

sinefunc()是一项常见功能。但是,A,B和C类存在不同 解决方案下的项目。这些类已经继承了一个公共类N,现在,

  1. 为避免代码重复,sinefunc()可以移到这些类之外。
  2. 但是,因为不允许多重继承。什么是有效的方法或 使功能通用的可行方法? (请注意,我不想放sinefunc() 在N级。它已经写好了,我不想打扰那个班级。

3 个答案:

答案 0 :(得分:4)

  

(请注意,我不想将sinefunc()放在N类中   已经写好了,我不想打扰那个班级)

如果不将该功能移至N课程,则无法执行此操作。您可以拥有一个具有方法签名的接口,但是您必须在每个类中定义实现。

一种方法是将扩展方法写入类N ,然后在继承的类中使用它。

编辑:

定义一个静态类来保存扩展方法,如:

public static class ExtensionClass
{
    public static void sinefunc(this N obj)
    {
        // your code
    }
}

稍后您可以将其称为:

static void Main(string[] args)
{
    A objA = new A();
    objA.sinefunc();
}

请记住包含持有扩展方法的命名空间,否则它将不可见。您可以在以下位置阅读更多内容:Extension methods MSDN

答案 1 :(得分:2)

您可以创建一个中间类,作为类N的外观:

class A : X {    }

class B : X {    }

class C : X {    }

class X : N
{
     protected void sinefunc()
     {
           //some stuff here
     }
}

答案 2 :(得分:0)

如果sinefunc()是一个常用函数,为什么不把它放到另一个类中。例如,您可以在Utility类

中将其设置为静态方法