【发布时间】:2021-01-04 15:21:43
【问题描述】:
我在理解命名空间和程序集之间的区别时遇到了问题。 因此,假设我打开了 Visual Studio,并创建了一个新项目。我将项目命名为“项目 A”。解决方案资源管理器将如下所示:
现在,据我了解,“Solution 'Project_A'(1 project)”是程序集,而它正下方的“Project_A”是第一个命名空间。现在,我知道我可以添加多个具有不同类的“嵌套”命名空间。所以我可以创建另一个名为 X 的类,然后在“Project_A”中创建一个新文件夹,这样一个名为“MainClasses”的新命名空间并在那里添加类 A 和 B,使其看起来像这样:
所以现在,如果我没记错的话:我有具有命名空间“Project_A”的程序集“Project_A”。命名空间“Project_A”包括一个名为 X 的类和另一个具有类 A 和 B 的命名空间。
现在,如果我转到“Solution 'Project_A'(1 project)”并单击 Add->New Project,我将创建一个名为“Project_B”的新命名空间,并将另一个类添加到新命名空间称为 Y,我现在将拥有: 包含命名空间“Project_A”和“Project_B”的程序集“Project_A”,如下所示:
如果我错了,有人可以纠正我并告诉我正确的方法。那么在 Visual Studio 中使用 c# 时,命名空间和程序集之间的确切区别是什么。当然,如果可以的话,最好显示一些屏幕截图。谢谢
【问题讨论】:
-
1 个项目通常产生 1 个程序集。它将是代码的二进制产品。就像 .exe 或 .dll 文件一样。命名空间完全不同。这只是将您的类型与其他类型区分开来的一种方式,并且是完全任意的。默认情况下,它遵循您的项目/文件夹结构,但没有什么能阻止您进入文件并将命名空间更改为您想要的任何内容。如果您将其更改为
namespace Foo,那么您将通过Foo.MyClass之类的方式访问该命名空间中定义的类型。 -
你可以把命名空间想象成域名。您可能在全球拥有数千台名为“computer1”的计算机,但您可以将它们与其他计算机区分开来,因为只能有一台 computer1.domain1.com。类似地,您可以拥有一组带有名为 MyClass 的类的程序集,但只要与您的项目关联的多个程序集不使用
MyClass的相同名称空间,您就不会遇到问题。您甚至可以在项目代码中拥有多个MyClass类,只要它们位于不同的命名空间中即可。在Data.User和Business.User等模型中经常使用。 -
命名空间“Project_A”是解决方案创建后自动创建的同名命名空间,您可以将其更改为您想要的任何名称。它与组装无关。
标签: c# visual-studio namespaces assemblies