【问题标题】:Avoiding code repetition without using multiple inheritance在不使用多重继承的情况下避免代码重复
【发布时间】:2013-01-02 06:28:46
【问题描述】:
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 班。它已经写好了,我不想打扰那个班。

【问题讨论】:

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


    【解决方案1】:

    (请注意,我不想将 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

    【讨论】:

    • 扩展方法是在不更改 N 的情况下将函数添加到 N 的多个子类的“C#onic”方式。也就是说,如果您有多个具有相同功能的子类,它似乎真的将其移入 N是正确的做法。
    • 感谢您告诉我扩展方法 Habib。这里很新。一些代码示例将不胜感激。
    • 感谢 Habib.. 这很有帮助。现在正在尝试实施。
    【解决方案2】:

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

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

    【讨论】:

    • 你的意思是多级继承?
    • 谢谢你的另一种方式!
    【解决方案3】:

    如果 sinefunc() 是一个普通函数,你为什么不把它放到另一个类中。例如,您可以在 Utility 类中将其设为静态方法

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多