C#:名称空间和类结构

时间:2010-08-25 13:23:29

标签: c# namespaces

来自Java,我习惯了包结构(com.domain.appname.tier) 现在我开始研究一个C#项目,其中所有项目的深度为1:

项目A
     - Utilities.cs
     - Validation.cs
     - ....
     - Extraction.cs

并且所有cs文件大约有2,500行......

如何在C#中编写类和命名空间,这样才有意义,并保持源文件的逻辑大小?

7 个答案:

答案 0 :(得分:9)

就像我想象你用Java做的那样:

  • 每个命名空间中的一些(< 10?)类,命名空间按层次结构排列
  • 每个源文件一个类
  • 每个源文件一两个屏幕文本

您加入的项目听起来并不是很有条理,也不是良好的源代码组织的好例子。

答案 1 :(得分:3)

在Java中用类似的方式,你只需要付出一些努力:)一些C#开发人员,尤其是VB背景,倾向于编写looooong类并将它们放在顶层。

答案 2 :(得分:2)

我建议阅读有关该主题的Microsoft指南:

Design Guidelines for Developing Class Libraries

特别要看下面的部分:

Guidelines for Names

即使您没有编写类库,您仍可以从这些指南中获益良多。 FxCop(或现在命名的代码分析)将标记许多不符合这些准则的结构。

答案 3 :(得分:1)

我首先开始将这些类组合成功能区域,例如授权区域将位于项目中的文件夹下。

然后更新文件夹中类的名称空间以反映更改,Resharper为您执行此操作,VS的较新版本也可能会这样做。

最后(如果你能够的话)我会开始将类分解为更小的更易管理的大小。

答案 4 :(得分:1)

以下是我如何组织我的解决方案的示例,它反映了命名空间结构。

alt text

项目有一个默认命名空间,在本例中是一个CompanyName.ProjectName 源文件按逻辑组织到目录结构中。在该示例中,我的WF4活动设计者在活动下组织在名为设计师的文件夹中。

VS的工作方式是,在项目中创建目录时,您还要创建名称空间。因此,如果我要在显示的目录中添加一个名为“Foo”的新活动设计器,其名称空间将为

“CompanyName.ProjectName.Activities.Designers”

Visual Studio采用默认命名空间,然后使用文件夹结构确定特定文件的命名空间。当然,一旦创建了文件,并且您移动了一个文件,它就不会自动重构。但是该系统不仅可以很好地控制类的名称空间,还可以保持文件的有序性。

答案 5 :(得分:0)

与在Java中一样。

在Java中,包组织物理目录中的类。我不确定这一点,但编译器甚至鼓励这个会议IIRC。在C#中,您没有义务将类组织到与命名空间匹配的单独目录中,但这是一个非常常见的约定。

说到C#中的命名空间,它们不遵循 com.domain.appname.tier 约定,而是使用 Company.Product.Tier 格式。

如何重新组织大类取决于应用程序。这是一个应用OOP指南的练习,适用于Java和C#。

答案 6 :(得分:0)

如果您深入参与该项目,我建议花一些时间来重新设置您在java中的方式,考虑到等同于名称空间在c#。