【问题标题】:Visual Studio C# Namespaces And AssembliesVisual Studio C# 命名空间和程序集
【发布时间】: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.UserBusiness.User 等模型中经常使用。
  • 命名空间“Project_A”是解决方案创建后自动创建的同名命名空间,您可以将其更改为您想要的任何名称。它与组装无关。

标签: c# visual-studio namespaces assemblies


【解决方案1】:

程序集是exe(可执行文件)或dll(动态链接库),它是软件主要“组件”(不是OOP 组件或控件意义上的)。有时命名为

What exactly is an Assembly in C# or .NET?

https://docs.microsoft.com/dotnet/standard/assembly/

命名空间是一种代码组织功能。

https://www.tutorialspoint.com/csharp/csharp_namespaces.htm

https://docs.microsoft.com/dotnet/csharp/programming-guide/namespaces/

类似于分区程序集可以包含一个或多个类似于文件夹命名空间

将程序集添加到项目的引用时,您可以使用文件开头的using 指令或直接在代码中指定完全访问权限来访问其所有命名空间。

例子

程序集System.dll 包含多个命名空间,如SystemSystem.IO 以及System.Threading 等。

using System.IO;

var lines = File.ReadAllLines(...);

或者:

var lines = System.IO.File.ReadAllLines(...);


...

【讨论】:

    【解决方案2】:

    这两个概念不相关。仅默认情况下,您的初始命名空间采用您的项目名称。

    默认情况下,您的每个项目都包含全局名称空间和您自己的名称空间。您可以将命名空间的默认名称重命名为您想要的任何名称。

    大会:

    程序集构成了基于 .NET 的应用程序的部署、版本控制、重用、激活范围和安全权限的基本单元。程序集是一组类型和资源的集合,它们被构建为一起工作并形成功能的逻辑单元。程序集采用可执行 (.exe) 或动态链接库 (.dll) 文件的形式,是 .NET 应用程序的构建块。它们为公共语言运行时提供它需要了解类型实现的信息。

    命名空间:

    命名空间具有以下属性:

    1. 他们组织大型代码项目。

    2. 它们使用 . 分隔。运算符。

    3. using 指令无需为每个类指定命名空间的名称。

    4. 全局命名空间是“根”命名空间:global::System 将始终引用 .NET System 命名空间。

    【讨论】:

      【解决方案3】:

      项目的命名空间在项目属性中设置。它默认设置为程序集名称,类文件在创建时继承此名称,但您可以更改为您喜欢的任何名称。如果您添加文件夹并将文件放入其中,文件夹名称将附加到父(对于第一个文件夹,这是程序集)命名空间。同样,您可以将其更改为任意名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-14
        • 2010-10-14
        • 2022-01-21
        • 1970-01-01
        • 2022-10-02
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多