是否有一种模式用于扩展具有实现接口的子类的基类?

时间:2017-05-01 15:58:44

标签: c# oop design-patterns

假设我有2个实现相同接口的类:

public interface IDoSomething
{
    void DoSomething();
}

public class Child1
{
    private const int CONST1 = 0;

    void IDoSomething.DoSomehting()
    { /*Do something the way a Child1 would*/ }
}

public class Child2
{
    private const int CONST1 = 0;

    void IDoSomething.DoSomehting()
    { /*Do something the way a Child2 would*/ }
}

我想知道的是,因为两个类都使用相同的常量(CONST1),所以我应该创建一个类如下的新类:

public class Parent
{
    private const int CONST1 = 0;
}

然后让Child1Child2从该类继承,假设这个场景中的真实类更大(有多个常量和多个通过接口实现的函数)?

1 个答案:

答案 0 :(得分:1)

继承 - 否。

  

继承是一个很好的选择:

     
      
  • 您的继承层次结构表示“is-a”关系,而不是“has-a”关系。
  •   
  • 您可以重用基类中的代码。
  •   
  • ...
  •   

来源 - https://msdn.microsoft.com/en-us/library/27db6csx(v=vs.90).aspx

条件#1在你的情况下立即失败,因为你的子类“有一个”常数。

条件#2可能会让你想到Parent,但是在决定继承时,记住#1应该仍然是优先事项。重用#2中的代码是指重用父类的行为,而不仅仅是字段。

我认为您帖子上的评论已经让您走上正轨。我会在这里巩固。

public interface IDoSomething {
    void DoSomething();
}

public class Constants {
    private Constants() {}
    public const int CONST1 = 0;
}

public class Class1 : IDoSomething {
    public void DoSomething() { 
        Console.Write(Constants.CONST1);
    }
}