如何避免C#中的命名空间和源文件名冲突?

时间:2013-02-01 19:07:08

标签: c#

我有一个课程让我们说它叫做“苹果”。假设该类位于名为“Apples”的文件夹中的.cs文件中

Project
   -Apples
       -Apples.cs
   -main.cs

如何在不写这篇文章的情况下引用它:

Main.cs

Apples.Apples.testVar = 2;

然后写下

Main.cs:

Apples.testVar = 2;

有没有办法做到这一点,还是我必须忍受它或更改文件夹名称?

4 个答案:

答案 0 :(得分:2)

如果在visual studio中有一个文件夹并在其中创建一个类,Visual Studio(可能还有其他IDE)会自动将文件夹的名称附加到从该文件夹创建的任何文件的名称空间中。

这并不意味着命名空间必须保持这种状态。 “文件夹”纯粹是出于组织目的,并不参与编译代码。文件名也与实际代码无关。如果您查看Apples.cs,只需更改:

namespace Apples.Apples
{
     //....

namespace Apples
{
    //...

这只是您的IDE用作您想要的假设的规则。你不需要遵循它。

编辑:至少我认为这是误解,因为你专注于文件夹名称 - 这对代码没有任何意义,只对你很重要。此外,如前所述,您可能会挂起名称空间名称和类名之间的歧义。正如在其他答案中所提到的,将类命名为与其命名空间相同是一个坏主意。

默认情况下,项目的全局命名空间与项目名称相同。因此,如果您将项目命名为“Apples”,然后创建一个名为“Apples”的文件夹并在该文件夹中创建一个名为“Apples”的类 - 那么您可以通过遵循命名空间链来导航到您的类:

Apples.Apples.Apples

您得出的结论是,您必须根据文件夹/文件名执行此操作,但它实际上是命名空间/类。你有几个选择,但底线是为了消除混乱和混乱2或所有3个“苹果”需要改变。更改文件名或文件夹名称将不起作用。您必须更改类名称和至少一个命名空间名称。更合适的东西:

AppleProject.Apples.AppleBase

甚至简单如下:

Apples.Apple // removed the extra namespace in the middle

答案 1 :(得分:1)

您可以在using语句中使用“Apples”别名:

using Apples = Apples.Apples.testVar;

或者您想要的任何内容都更容易阅读。

答案 2 :(得分:1)

将它放在文件的顶部 -

using Apples = Apples.Apples;

答案 3 :(得分:1)

是的,如果您使用的是C#,只需将其添加到您所在的代码文件顶部的使用参考中:

EG:

使用Apples.Apples;

如果项目集不在您当前的项目中,您只需要确保具有对项目集的引用。