顶层通用类库使用时,Class.Class与Namespace.Class有何区别?

6
哪种方法更可接受(最佳实践)?:
namespace NP
   public static class IO
   public static class Xml
   ...
   // extension methods

using NP;

IO.GetAvailableResources ();

vs

public static class NP
   public static class IO
   public static class Xml
   ...
   // extension methods

NP.IO.GetAvailableResources ();

对于#2,代码大小是通过使用部分类来管理的,因此每个嵌套类可以在单独的文件中,扩展方法也是如此(除了它们没有嵌套类)。
我更喜欢#2,有几个原因,比如能够使用已经常用的类型名称,比如IO,我不想替换或冲突。
你更喜欢哪个?每个的优缺点是什么?这种情况下的最佳实践是什么?
编辑:这两者之间是否会有性能差异?
7个回答

3
我认为选项 #1 是更好的选择。因为当您将许多类捆绑到一个静态类中时,您所做的就是命名空间的用途。这就是为什么我认为最好让命名空间为您完成这项工作。
在这种情况下,您还可以通过添加 using 来消除在所有内容前面写“NP”的步骤(如果您想要的话)。我认为您应该嵌套您的命名空间,以避免它们发生冲突,或者使用比 IO 更详细的命名空间名称。
通常最佳实践是遵循微软的做法,我从未见过他们使用选项 #2。

2

我更喜欢#1,因为它不需要我通过一个类来调用另一个类。我认为这会让事情变得有点混乱,因为通常对象都应该有成员类、方法等,直接处理通过实例化类创建的对象。这意味着你并没有真正遵循面向对象编程的原则。Microsoft也认为#1是最佳实践。


2
命名空间的整个意义在于它们用于组织代码:命名空间在C#程序中有两种重要的使用方式。首先,.NET框架类使用命名空间来组织其许多类。其次,声明自己的命名空间可以帮助控制较大编程项目中类和方法名称的范围。
当您查看.NET框架本身时,可以看到几乎所有内容都像第一个示例(命名空间)一样结构化,而几乎没有任何内容像第二个示例(嵌套类型)那样结构化。仅在与外部类型紧密相关且实质上是其一部分但需要成为单独的类以便于代码重用等原因时,才会使用嵌套类型。
因此,如果您所说的“最佳实践”是指“将事物用于设计目的”、“最像.NET框架”并且“与.NET设计范例最接近”,那么毫无疑问,使用命名空间进行组织,而不是嵌套类型。
关于您的编辑 - 不,现实世界中不会有影响性能的区别。

1

我从未见过你使用的第二个。它让我想起了VB6模块。


1

我更喜欢使用#1并让命名空间来完成。正如其他人所说,通过调用类来获取其他类非常令人困惑。

此外,当您进行更复杂的操作,例如反射或使用提供程序模型时,嵌套类成为实际提供程序部分或您试图到达的目标变得棘手。

最后,测试嵌套类和接口会使测试变得更加困难。


0

我有时候会使用第二种方法,接下来我会解释为什么。但是在你的情况下,如果是空的静态类,命名空间更加理想,因为这就是它们的用途。

然而,如果你有一个使用派生类的情况,有时将这些派生类嵌套可能是有意义的。

例如,你可以有:

public abstract class Vehicle
{
    int NumberOfWheels;
}

public class SportsCar : Vehicle
{
}

现在,您可能希望将它们都放在Vehicle命名空间下,以便父类不会被所有不同的派生类所混淆。然而,这是一个糟糕的想法。

相反,嵌套它们可以给您带来所有的好处:

public abstract class Vehicle
{
    int NumberOfWheels;

    public class SportsCar : Vehicle
    {
    }
}

0

我认为你应该避免使用公开嵌套类和接口,或者至少这是微软 FxCop 的建议。因此,第一个选项更好。

编辑:(是的,改成了第一个选项,当我很疲倦时我不应该在 SO 上回复)


2
你是不是指第一个?第二个是嵌套类。 - Ben Hoffman
我假设你是指第一个 ;) - Thomas Levesque
第一个!确实,抱歉 :-) 我也+1 :-P - M.A. Hanin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接