c#里一个文件夹下可以添加多个命名空间和类名相同的类么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#里一个文件夹下可以添加多个命名空间和类名相同的类么相关的知识,希望对你有一定的参考价值。

在c#的一个项目文件下有一个类叫“类1”吧,我又添加了一个类,叫“类2”,在类2里面我写的命名空间和class类名能和类1里面的相同么?

比如说:类1:namespace X class Y 那么类2的namespace还可以是X么 class 还能是Y么

命名空间:可以理解成文件夹

类:可以理解成文件

类1,类2都属于同一个namespace是可以的。也就是两个文件可以存在于同一个文件夹里面。

但是同一个文件夹里面不可以存在同名的文件。所以class Y,是不可以的。追问

我尝试了一下,class Y也是可以的,但是class前用了一个partial ,不知道是不是这个原因,求大神解释

追答

很惭愧,我不是大神啊。

是的,就是它的缘故。

partial的意思是部分类。也就是说,会把运用了这个关键字的所有类的,最终编译成一个文件。所以如果你不运用代表部分类的关键字,也就是每个类是一个独立的类,那么一个命名空间下只能有一个类。

如果你对多个类运用了partial关键字,最终生成的代码,其实还是一个类。其实,还是没有违背一个命名空间下只能有一个类。

partial关键字的用途。
partial关键字,一开始出现主要是为了解决asp.net中.aspx页面的问题。
我们都知道.aspx页面可以拖放控件,可以调整控件的样式,可以编写事件。
C#中一切操作即对象,所以每一个.aspx页面一定要有一个类,来表示该页面中的所有控件,并且设置所有控件的样式(这里是生成的第一个类,来描述控件信息)。
.aspx页面还可以让用户自己编写代码(这里也要生成一个类,来让用户自己编写代码)。
这是时候,矛盾的点就出现了。创建一个.aspx页面,如果附带生成2个不同名的类,来表示。显然有点怪怪的。最好的解决方法,就是把这两个类,合并成一个类。所以就有了partial,最终会将运用这个关键字的类,编译时都会合并成一个类。

参考技术A

    C#的命名空间的组织与文件的物理位置没有关系,这与java有很大不同,用起来也感觉方便很多,VS在文件夹里添加新文件的时候会自动加上文件夹名作底层命名空间,但是可以手工改。

    partial class主要是便于区分ide的自动代码与程序员的代码,一个类的多个部分分布于不同的文件,命名空间自然应该一样。

我无意中为命名空间和类名使用了相同的名称,并且需要重命名其中一个的所有实例

【中文标题】我无意中为命名空间和类名使用了相同的名称,并且需要重命名其中一个的所有实例【英文标题】:I inadvertently used the same name for namespace as well as the class name, and need to rename all instances of one of them 【发布时间】:2021-03-26 21:40:22 【问题描述】:

我无意中为命名空间和类名使用了相同的名称,并且需要重命名其中一个实例的所有实例...仅重命名类更容易逃脱吗?

我回答了一些关于该主题的现有问题:

    Should a class have the same name as the namespace? What's the best way to do a bulk namespace rename on a large c# application?

可以肯定的是,命名空间和类的名称肯定需要不同。似乎即使您可以重构命名空间,也需要在多个文件中手动更改它。

因此,我是否应该简单地重命名类名,它只需要在四个地方重命名:类名定义本身、构造函数和 Program.cs 文件中的两个地方(这是一个 Azure Service Fabric 应用程序)。

我是否遗漏了需要更改类名的地方?

【问题讨论】:

重命名类通常更容易,因为更容易诱使 IDE 做正确的事情。这样做是否正确是您必须自己决定的事情。如果在 IDE 中使用重命名重构,它应该重命名类、构造函数、用法和文件名。如果您在字符串中引用了类名(您不应该这样做,请改用nameof(type)),您可能必须在之后手动修复它们。 【参考方案1】:

如果您选择使用 Visual Studio,您可以轻松更改文件名。方法如下:

    转到Source Explorer

    右键单击要重命名的文件 > 点击Rename

    出现一个对话框 > 点击Yes

这将重命名解决方案中文件的所有引用。

【讨论】:

以上是关于c#里一个文件夹下可以添加多个命名空间和类名相同的类么的主要内容,如果未能解决你的问题,请参考以下文章

C# 未能找到类型或命名空间名称 "MyRectangle"(是不是缺少 using 指令或程序集引

C#如何创建一个具有多个相同命名项目的解决方案?

第一个C#程序

PHP命名空间

C# 从零开始 vol.2

具有相同命名空间但在不同程序集中的内部类?