0

我开始重构我的应用程序的文件结构,因为它有各种明确定义的部分,将它们放在不同的文件夹中会使整个事情更容易理解/维护。

当我在 Visual Studio 中创建文件夹,将 *.cs 文件移动到其中,然后尝试编译时,我以为我会遇到问题。但是不,VS 并没有窥视,它运行良好。

更具体地说,我在我的项目下面创建了一个名为“SharedCode”的文件夹,然后将一个名为 SQLDBHelper.cs 的文件拖到该文件夹​​中(我没有复制它,我移动了它)。我认为对其中代码的引用,例如:

DataTable dtPriceComplianceResults = SQLDBHelper.ExecuteSQLReturnDataTable(ReportRunnerConstsAndUtils.SUMMARY_STOREDPROC, . . .

...将停止工作,因为他们以前在同一级别上找到了该文件(直接在项目下方,“ReportRunner”),现在它位于“ReportRunner\SharedCode”中

但它大步前进 - 编译并在我运行应用程序时成功拨打电话。

我也有点期待 Visual Studio(或 Resharper?)会在 SQLDBHelper 中改变这一点:

namespace ReportRunner

...对此:

namespace ReportRunner.SharedCode

......但它没有。为什么这可以无缝地工作,这是否意味着我可以创建其他项目文件夹并将文件拖到他们的任意位置并期望所有代码仍然知道在哪里查找它调用的代码?

更新

虽然它编译并运行良好,但当我让 Resharper 猎犬在它上面松动时(通过 Resharper > Inspect > Code Issues in Solution),我得到了一些沿着这些线的手指:

Project ReportRunner
  PriceCompliance\PriceComplianceRpt.cs:13 Namespace does not correspond to file location, should be: 'ReportRunner.PriceCompliance'

如果我默认并让 Resharper “修复问题”,则命名空间从“命名空间 ReportRunner ”更改为“命名空间 ReportRunner.PriceCompliance

但是,由于没有这种更改重新锐化命名空间,一切都可以正常工作,将文件夹名称附加到命名空间有什么好处?

4

1 回答 1

1

命名空间和该命名空间中的类所在的文件夹不必匹配。C# 或 .NET 中没有任何东西可以强制执行此操作。您可以调用您的命名空间A.Really.Long.Name.With.Lots.Of.Dots并将类放在一个文件夹中,该文件夹code为编译器所关心的所有内容。它是一台计算机,计算机擅长跟踪事物,无论它们被称为什么。

但是,组织文件夹以使它们与命名空间匹配(反之亦然)是一种很好的做法,因为它使(人类)更容易找到您正在寻找的类/文件。您很难记住代码在我的(不可否认的极端)示例中的位置,但在您的情况下,所有类ReportRunner.PriceCompliance都将位于一个名为的文件夹中..\ReportRunner\PriceCompliance,而不是硬盘驱动器上的其他位置。

因此,ReSharper 在这里所做的是强制执行良好实践——这是它相当擅长的。

于 2015-12-22T23:15:47.917 回答