在名称空间结构中公开继承层次结构是一个坏主意吗?
时间:2020-03-05 18:41:14 来源:igfitidea点击:
我有一组相互关联的类,它们被一起重写以创建特定的实现。我想知道将相互关联的子类包含在名称空间中是否是一个好主意。
出于示例目的,请考虑以下名称空间和类:
namespace Protocol { public abstract class Message { } public abstract class Driver { } } namespace Protocol.Tcp { public class TcpMessage : Message { } public class TcpDriver : Driver { } } namespace Protocol.Ftp { public class FtpMessage : Message { } public class FtpDriver : Driver { } }
构造名称空间的最佳方法是什么?似乎不可避免地要在命名空间中公开继承,因为基类实际上并不属于Protocol.Tcp命名空间或者Protocol.Ftp命名空间。
解决方案
回答
我想我们也许太担心了!
从逻辑上讲有意义吗?我们知道在命名空间中的哪里找到代码吗?
我宁愿看到像上面这样的具有少量类的代码库,而这些类与具有层次结构的名称有关,而不是一个大型的命名空间,其中所有内容都是相互关联的。
请记住,命名空间正是为了实现此目的,以便逻辑上组织代码库
你所拥有的似乎合乎逻辑:)
编辑:
举个例子:
using System.Data; using System.Data.Sql;
;)
回答
如果是我,我将定义2个名称空间:
Protocol
和
Protocol.Driver
像这样划分名称空间会将"库代码"与"可执行/测试代码"分开。
我还创建了名称空间以匹配目录结构。它将为程序结构和代码文件提供逻辑。 (也许我们已经这样做了...)
回答
原始标签显示此帖子与C有关,因此多重继承是不相关的,我们不能在C#中将继承相乘。
也许我们应该考虑定义一些接口来定义"消息"和"驱动程序"的基本协定,然后使用命名空间结构来模仿技术差异可能会感到有些自由。