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

本文关键字:源文件 文件名 冲突 命名空间 何避免 | 更新日期: 2023-09-27 17:56:57

我有一个类,假设它叫做"Apples"。假设该类位于名为"Apples"的文件夹中的.cs文件中

Project
   -Apples
       -Apples.cs
   -main.cs

我怎么能不写这个就引用它:

主.cs

Apples.Apples.testVar = 2;

然后写

主.cs:

Apples.testVar = 2;

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

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

把它放在文件的顶部 -

using Apples = Apples.Apples;

如果在 Visual Studio 中

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

这并不意味着命名空间必须保持这种状态。"文件夹"纯粹用于组织目的,在代码编译中不参与。文件名对实际代码也无关紧要。 如果你看看你的苹果.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

您可以在 using 语句中别名 "Apples":

using Apples = Apples.Apples.testVar;

或者任何你想让它更容易阅读的东西。

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

例如:

使用苹果;

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