如何实现所有使用相同变量的类

时间:2008-12-12 09:41:48

标签: class field

我有6个类,它们都是文档类型。所有文档类型都具有相同的8个字段。有一个类只包含这8个字段。其余的类有更多的字段。其中一些类具有相同的字段(在8个字段旁边)。

示例:

类文档:字段1到8

类表单:字段1到8以及字段9和10

class WorkInstruction:字段1到8以及字段9和10

类过程:字段1到10和字段11

希望这能说明我的观点。

我的问题是,实现这个的最佳方法是什么?我应该创建一个或多个接口,还是应该使用抽象类?

日Thnx

3 个答案:

答案 0 :(得分:2)

使Document成为Form等的基本类型,或者使表单具有额外的字段和对单独Document的引用(即使用组合而不是继承)。在这种情况下,听起来遗传很可能是最好的选择,但它实际上取决于你想用它做什么。您是否拥有适用于任何文档的代码,包括Form,WorkInstruction等?

编辑:例如,假设您有一个用户界面控件,可以显示任何文档的公共部分 - 即常见的8个字段。这将采用Document的一个实例。您可能希望能够直接向其传递Form或WorkInstruction - 在这种情况下,最好从Document派生。或者,在渲染Form或WorkInstruction时,您可以创建分别传入文档部分的控件实例。即它之间的区别(在C#中 - 您没有指定您感兴趣的语言):

class Form : Document { ... }

// Later on
Controls.Add(new DocumentDisplay(form));

和此:

class Form
{
    private Document Document { get; set; }
    // Other stuff
}

// Later on
Controls.Add (new DocumentDisplay(form.Document));

在不了解您的其他设计的情况下,很难推荐其中一个。我通常更喜欢构图而不是继承,但这感觉更像是一种自然的继承情况。

答案 1 :(得分:0)

旧学校的答案是创建一个包含共享字段和继承的类。

时髦的答案是创建一个有这些恶魔并将其作为成员的课程。

继承会在类之间创建更多的依赖关系,如果你每次都改变基础,这被认为是不好的做法。

在一个简单的例子中,它并没有真正发挥那么大的作用。但是,如果您开始向这些字段添加行为,则可以。

答案 2 :(得分:0)

提供明确答案的信息太少

如果这些对象共享的唯一内容是数据属性......我会使用类似的东西。

class Document
{
   List<Field> m_Fields;
   public void AddField(Field f) {... }
   public void AddFields(Field[] f) {... }
}

class DocumentFactory()
{
  public static Document GetDocument()
  {
     Document d = new Document();
     d.AddFields(GetDocumentFields());      // private helper .. returns fields 1-8
     return d; 
  }
  public static Document GetForm()
  {
     Document d = new Document();
     AddDocumentFields(d);
     d.AddField(FIELD_9);
     d.AddField(FIELD_10);
  }
  // and so on..
}

任何与文档类型无关的代码都会进入Document类 除此之外,你还有专门的/基于特定对象类型的行为,你需要增长一个继承类型层次结构(正如Jon所说的那样......它看起来像名字中的IS-A关系。)