代码之家  ›  专栏  ›  技术社区  ›  Nobody

避免许多继承类

  •  2
  • Nobody  · 技术社区  · 15 年前

    假设我上了这门课(举个例子):

    internal class Packet
    {
    
        private readonly UInt32 _length;
        private readonly Byte _type;
        private readonly UInt32 _requestId;
    
    }
    

    有许多不同类型的数据包,每个数据包都继承自这个类,并且每个数据包类型可以具有任意数量的不同类型的属性。

    我考虑过使用 List<Tuple<Type,Value>> _typesSpecificValues -我知道它不会编译,但我不知道如何表达我的意思。

    我需要避免为每种类型的数据包创建一个继承类,因为大约有50种类型-或者我只是在偷懒??

    4 回复  |  直到 15 年前
        1
  •  7
  •   Jon Skeet    15 年前

    听起来像你 是的,我正在创建单独的类。

    但是,我不确定是否要让它们从这个类派生。听起来这应该是一个 Header 类(甚至可能是一个结构),然后您可以有多个类,每个类 包含 收割台

        2
  •  2
  •   Beth Lang    15 年前

    根据你的简短描述,听起来更像是结构而不是类。再看看你50多个不同的定义,看看它们到底有什么不同。例如,如果有一半是以一种方式处理的,而另一半是以另一种方式处理的,那么您可能真的只有两个类知道如何处理不同的结构。

        3
  •  1
  •   Beep beep    15 年前

    你需要问自己的是: 单独使用“Packet”有什么意义吗? . 在所有/大多数使用中,您是否访问基类的属性?

    例如,假设您有:

    public class CommPacket : Packet
    {
        public string Message { get; set; }
    }
    

        4
  •  1
  •   Carlos Muñoz Boom    15 年前

    如果有这么多不同类型的类,它们之间有许多不同的特征,那么不应该使用继承,而应该使用组合。

    阅读 this article 这比我能解释的更好。

    编辑

    读这个 优秀书籍中关于装饰图案的章节 Head First: Design Patterns

    为了让你注意到这本书,这里有一些截图:

    继承 Inheritance

    组成 Composition