如何只为一个类的3个子节点实现一个非静态方法?

时间:2014-03-30 03:16:25

标签: c# class structure

我有7个类继承了" Base" class:

  • Class1:Base
  • Class2:Base
  • ...
  • Class7:Base

对于这7个类中的3个,我必须添加非静态方法(完全相同的代码),但此方法应该对其他人可见课程,我不知道如何组织我的代码。

任何人都可以帮助我?

修改: 我不能这样做:

  • 基地
    • 带有“秘密”的课程'方法:基础
    • 第1课:带有“秘密”的课程'方法
    • Class2:带有“秘密”的课程'方法
    • Class3:带有“秘密”的课程'方法
    • Class4:Base
    • Class5:Base
    • Class6:Base
    • Class7:Base

因为在非静态方法中,我使用了在Class1,Class2和Class3类中声明的属性(我无法移动它,它由Entity Framework处理)。示例:

this.var

2 个答案:

答案 0 :(得分:5)

这样做:

  • 基地
    • 使用'秘密'方法的类:基础
      • Class1:具有'秘密'方法的类
      • Class2:具有'秘密'方法的类
      • Class3:具有'秘密'方法的类
    • Class4:Base
    • Class5:Base
    • Class6:Base
    • Class7:Base

答案 1 :(得分:1)

重用代码的方法多于继承。只有在需要" is-a"时才能使用继承。类型,不仅仅是因为您不想要多个代码副本。

遏制可能是更好的选择。但是,这取决于你的方法究竟是做什么的。

例如:

public class Contained {
    public void SpecialMethod() {}
}

public class Class1 : Base {
    private Contained _contained = new Contained();

    public override void NormalMethod() {
        // do some work
        _contained.SpecialMethod();
    }
}

public class Class2 : Base {
    private Contained _contained = new Contained();

    public override void NormalMethod() {
        // do some work
        _contained.SpecialMethod();
    }
}