4

我有一组相互关联的类,它们都被一起覆盖以创建特定的实现。我想知道将相互关联的子类包含在命名空间中是否是个好主意。

例如,考虑以下命名空间和类:

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 命名空间。

4

3 回答 3

6

我想你可能是担心太多了!

这在逻辑上有意义吗?你知道在命名空间中哪里可以找到你的代码吗?

我更愿意看到像上面这样的代码库,其中包含少量的类,与具有层次结构的名称相关,而不是一个一切都相互关联的大型命名空间。

请记住,命名空间正是为此而存在的,以逻辑地组织您的代码库

你所拥有的似乎合乎逻辑:)

编辑:

举个例子:

using System.Data;
using System.Data.Sql;

;)

于 2008-08-20T19:16:07.907 回答
1

原始标签显示这篇文章是关于 C# - 因此多重继承是无关紧要的 - 你不能在 C# 中多重继承。

也许您应该考虑定义一些接口来定义 aMessage和 a的基本合同是什么Driver,然后您可能会觉得使用命名空间结构来模仿技术差异会更自由一些。

于 2008-09-23T21:52:37.520 回答
0

如果这是我,我会定义 2 个命名空间:

Protocol

Protocol.Driver

像这样划分命名空间将您的“库代码”与“可执行/测试代码”分开。我还创建了命名空间以匹配目录结构;它将为您的程序结构和代码文件提供逻辑。(也许你已经这样做了......)

于 2008-08-20T19:20:35.167 回答