2010-02-26 52 views
4

在命名空间中声明类型但不在类中的可能用法是什么。C# - 名称空间中的类型声明

对于前:

namespace Test 
{ 
    public delegate void Ispossible(); 
} 

这是有效&不会产生任何编译错误,但我想不出为什么我们会宣布它,而不是一个类的内部这样。

+0

问题是关于特别声明代表的问题,还是如您所写,一般只是“类型”? – 2010-02-26 17:21:44

+0

我想知道这两种情况。 – SoftwareGeek 2010-02-26 17:23:23

回答

6

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

在范围内声明类型类(但与所有情况一样,这不是100%的规则),因为它可以使类型更加紧密耦合并且更难以找到。但是通常情况下,.NET生态系统中的所有内容都包含在命名空间中。但是,.NET生态系统中的所有内容都包含在命名空间中。

你的例子有助于重用;如果它属于一个类,那么它就意味着该代表只能被该类使用,并且可能导致不必要地引入重复的代表。


更新:当仅有的类型的命名空间似乎并没有多大用处了一把工作,但没有他们的任何规模的项目将是一个组织的灾难。想象一下没有命名空间的.NET框架,其中一个(可能已经过时)count将框架放在3500类型中。

命名空间就像文件夹或抽屉;一些松散的论文很容易管理,但如果你有很多页面,那么找到你需要的论文会变得很痛苦。

给文档的读取,它很短,并且不是非常复杂的(无论是命名空间),但有几个像样点MSDN - Namespace (c#)

4

如果它是一个多用途的代表,如Func<TResult>,EventHandler这是不涉及到一个特定的类,那么你应该直接在名称空间中声明它。

2

你的措辞(“这可能是一个命名空间中可能使用声明的类型,但不在一个类中“),表明你在”类型“和”类“之间作了区分。空无一人。一个类是一个类型。

那么,在什么条件下你想直接在命名空间中声明一个类(即它最常用的方式)?这些相同的原因适用于其他类型的。

+0

谢谢,但我指的是事件,代表等类别以外的其他类型。 – SoftwareGeek 2010-02-26 19:51:44

+0

重新阅读我的最后一句话。 – 2010-02-26 20:51:37

0

命名空间和类都可以用来组织层次结构中的信息。但是,名称空间允许通过dll边界分布定义,但类不会。类也需要在类名前放置类名,但命名空间允许使用关键字“using”。

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

如果你想强迫人们用任何其他名称来前缀类型名称而不能依赖名称空间上下文,那么你可以使用类。