C# - 在命名空间中声明类型

6
声明命名空间中但不在类中的类型可能有什么可能的用途。
例如:
namespace Test
{
    public delegate void Ispossible();
}

这是一个有效的声明,不会产生编译错误,但我想不出为什么要这样声明它,而不是在类内声明。

这个问题是特指声明委托,还是像你所写的那样,一般涉及“类型”? - Anders Fjeldstad
我想了解两种情况。 - SoftwareGeek
4个回答

6

命名空间是.NET中的一种高级组织单位。

在类内部声明类型通常不被推荐(但是,像所有事情一样,这不是一个100%的规则),因为它会使类型更加紧密耦合且更难以找到。

VB.NET模块有些例外(编辑:它们实际上更像是编译器技巧/语法糖),但通常.NET生态系统中的所有内容都包含在命名空间中。

您的示例适合重用;如果它在类内部,则意味着该委托应仅由该类使用,并且可能会导致不必要地引入重复委托。


更新:当处理少量类型时,命名空间似乎没有太大用处,但是在没有它们的情况下,任何大小的项目都将成为组织灾难。想象一下没有命名空间的.NET框架,一个(可能已经过时的)计数将框架数量定为3500个类型。

命名空间就像文件夹或文件柜一样,对于几张散纸很容易管理,但是如果有很多页,则查找所需的一页变得痛苦。

请阅读文档,它很简短,不是太复杂(命名空间也不是),但有一些不错的观点MSDN - Namespace (c#)


4
如果是像Func<TResult>EventHandler这样的多用途委托,与特定类无关,则应直接在命名空间中声明。

2

您的措辞(“在命名空间中声明类型但不在类中声明可能有什么用途?”)表明您区分“类型”和“类”。实际上它们是等同的,一个类就是一种类型。

那么,在什么情况下您需要直接在命名空间中声明一个类(即通常的做法)?这些相同的原因也适用于其他类型。


谢谢,但我指的是除了类之外的类型,比如事件、委托等。 - SoftwareGeek

0

命名空间和类都可以用于层次化组织信息。但是,命名空间允许在dll边界上分布定义,而类不允许。此外,类需要在类型名称之前放置类名称,而命名空间允许使用关键字“using”。

因此,如果您想在不同的dll中定义一个命名空间中的委托,则使用命名空间。

如果您想强制用户在不能依赖于命名空间上下文的情况下为类型名称添加任何其他名称前缀,则使用类。


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