可以在命名空间中声明类型但不在类中声明类型。
例如:
namespace Test
{
public delegate void Ispossible();
}
这是有效的&不产生任何编译错误,但我想不出为什么我们会这样声明它而不是在类中。
答案 0 :(得分:6)
命名空间是.NET中的高级组织单位。
在类中声明类型通常不受欢迎(但是,与所有事情一样,它不是100%规则),因为它可以使类型更紧密地耦合并且更难以找到。
VB.NET模块有点例外(编辑:它们实际上更像是编译器技巧/语法 - 糖),但通常.NET生态系统中的所有内容都包含在名称空间中
你的例子有助于重用;如果它在一个类中,则意味着该委托只应由该类使用,并可能导致重复的代表被不必要地引入。
更新:当只使用少数几种类型时,命名空间似乎没什么用处,但如果没有它们,任何规模的项目都将是组织上的灾难。想象一下没有命名空间的.NET框架,一个(可能已经过时)计数将框架置于3500类型。
命名空间就像文档的文件夹或抽屉;一些松散的论文很容易管理,但如果你有很多页面,那么找到你需要的那些页面就会变得很痛苦。
给文档一个读取,它很短并且不是非常复杂(也不是命名空间)但有几个不错的点MSDN - Namespace (c#)
答案 1 :(得分:4)
如果它是一个多用途委托,例如Func<TResult>
,EventHandler
与特定类无关,那么您应该直接在命名空间中声明它。
答案 2 :(得分:2)
你的短语(“可能在命名空间中声明类型而不是在类中可能使用。”)表示你在“类型”和“类”之间进行区分。空无一人。类是一种类型。
那么,在什么条件下你想直接在命名空间中声明一个类(即最常用的方式)?这些相同的原因适用于其他类型。
答案 3 :(得分:0)
命名空间和类都可用于组织层次结构中的信息。但是,名称空间允许跨dll边界分发定义,但类不允许。类也需要在类型名称之前放置类名,但名称空间允许使用关键字“using”。
因此,如果要在不同dll中的一个命名空间中定义委托,则使用命名空间。
如果您想强制人们使用任何其他名称为类型名称添加前缀而不依赖于名称空间上下文,那么您可以使用类。