命名空间还是程序集?

 love糸_603 发布于 2023-01-29 17:04

我在命名空间和程序集之间变得非常困惑.是System.DataSystem.Web命名空间或程序集?

我注意到这些被称为命名空间,同时它们存在于GAC_32文件夹中.那究竟是什么?

8 个回答
  • 命名空间是属于相同功能的类的逻辑分组.所以System.Web并且System.Data是命名空间

    MSDN将其描述为:

    命名空间在两种方式中大量用于C#编程.首先,.NET Framework使用命名空间来组织其许多类.其次,声明自己的命名空间可以帮助控制较大编程项目中的类和方法名称的范围.

    命名空间

    程序集是可以由.NET运行时环境执行的(预编译)代码块.它包含一个或多个命名空间..NET程序由一个或多个程序集组成.

    System.Web.dll并且System.Data.dll是集会.

    MSDN将其描述为:

    程序集是.NET Framework应用程序的构建块; 它们构成了部署,版本控制,重用,激活范围和安全权限的基本单元.程序集是一组类型和资源的集合,这些类型和资源构建为一起工作并形成逻辑功能单元.程序集为公共语言运行库提供了识别类型实现所需的信息.对于运行时,在程序集的上下文之外不存在类型.

    部件

    2023-01-29 17:05 回答
  • System.Data是一个名称空间, System.Data.DLL(该文件)是一个程序集.

    命名空间是类型的逻辑分组(主要是为了避免名称冲突).程序集可以包含多个名称空间中的类型(System.DLL包含一些...),并且单个名称空间可以跨程序集分布(例如System.Threading).

    2023-01-29 17:05 回答
  • 其他人对这个问题给出了非常好的和详细的答案.但我想指出,当你不确定时,你可以查看MSDN.MSDN库非常清楚地解释了任何给定类型所在的命名空间程序集.它甚至说文件的名称,(in System.Data.dll)所以没有歧义.

    在此输入图像描述

    2023-01-29 17:06 回答
  • 您在GAC中看到的文件System.Data.dll是一个程序集,其中包含名称空间System.Data.如果您在Visual Studio中查看Reference属性,那么您将看到:

    在此输入图像描述

    稍后如果右键单击引用并在对象浏览器中选择视图,您将在该特定程序集中看到名称空间.

    在此输入图像描述

    2023-01-29 17:06 回答
  • 简而言之:

    部件:

    程序集提供了物理代码分组的基本单元.它是一个输出单元.它是部署单元和版本控制单元.程序集包含MSIL代码.

    命名空间:

    命名空间提供了逻辑代码分组的基本单元.它是一个名称集合,其中每个名称都是唯一的.它们构成了一组类的逻辑边界.必须在Project-Properties中指定名称空间.

    2023-01-29 17:06 回答
  • 它们是namespaces.Assemblies包含多个名称空间.例如:System.dll包含这些名称空间(以及更多):

    在此输入图像描述

    另外一个命名空间可能包含嵌套的命名空间.它们只是组织代码的逻辑名称.请注意,DLL文件是包含命名空间的程序集.

    GAC全局程序集缓存.根据MSDN:

    全局程序集缓存存储专门指定由计算机上的多个应用程序共享的程序集.

    所以常用的程序集存储在其中GAC,因此您不需要将所有程序集文件复制到您从项目引用的项目目录中.存储在Strong-Named程序集中的程序集.GAC通常在添加对您的项目中不是文件副本的程序集将在您的文件夹中创建.如果您希望可以进行汇编(例如类库项目)Strong-Named.See:如何:使用Strong签署程序集名称Strong-Named.dllbin\Debug

    2023-01-29 17:06 回答
  • 简而言之:

    程序集存储为.EXE或.DLL文件.

    命名空间是一种对类型名称进行分组并减少名称冲突的方法.

    提示.

    程序集包含一组类型(例如l'程序集System包含许多名称空间,包括System,System.IO,ecc).通常,程序集的名称与它包含的名称空间相同,但并非总是如此.

    程序集和命名空间的其他示例.

    程序集1(CoreAssembly.DLL)

    包含名称空间Namespace1.subnamespace1

    程序集2(ExtensionCoreAssembly.DLL)

    包含名称空间Namespace1.subnamespace1

    可以使用包含不同命名空间的程序集名称,并通过此技术使用其他程序集扩展现有程序集.

    定义.

    大会

    程序集是形成逻辑功能单元的类型和资源的集合..NET Framework中的所有类型都必须存在于程序集中; 公共语言运行库不支持程序集之外的类型.每次使用Visual Basic .NET创建MicrosoftWindows®应用程序,Windows服务,类库或其他应用程序时,您都在构建单个程序集.每个程序集都存储为.exe或.dll文件.注意虽然从技术上讲可以创建跨多个文件的程序集,但在大多数情况下,您不太可能使用此技术.

    命名空间

    组织Visual Basic .NET代码的另一种方法是使用命名空间.命名空间不是程序集的替代品,而是补充程序集的第二种组织方法.命名空间是一种对类型名称进行分组并减少名称冲突的方法.命名空间可以包含其他命名空间和类型.类型的全名包括包含该类型的命名空间的组合.

    链接:http://msdn.microsoft.com/en-us/library/ms973231.aspx

    2023-01-29 17:06 回答
  • 正如@amdluigi所说,"通常,程序集的名称与它包含的名称空间相同,但并非总是如此".

    Studio中的对象浏览器中有一个System.Data.dll的屏幕截图.这是探索这里问题的一个很好的例子.请注意,程序集中包含的大多数命名空间都是System.Data或System.Data的子命名空间.

    通常,将程序集名称与其中的名称空间相关联是一种很好的做法.请注意,当Studio首次创建项目以构建程序集时,其中一个项目属性是默认名称空间.一开始,Studio提供的默认命名空间与项目本身的名称相同.如果您选择重命名项目,请考虑更改其默认命名空间.

    还有两个额外的命名空间:Microsoft.SqlServer是可以理解的.一些SQL Server类型,他们不想在单独的程序集中打包.

    但是System.Xml是什么???? 有一个System.Xml.dll程序集.为什么这个命名空间也出现在System.Data.dll中?

    请注意,程序集可以重新打开命名空间并向其添加更多内容 - 这正是System.Data.dll正在使用System.Xml命名空间执行的操作.

    原因是名称空间没有性能影响,但程序集非常重要.如果您有1000个具有大量代码的类,则不希望一个具有非常大的内存占用的程序集.您也不希望每个1000个程序集都有一个类.在执行其内容之前,需要将任何程序集加载到内存中.您希望程序集包含合理数量的相互关联的类,因此一旦您的应用程序加载了一个程序集以获取其中一个类,它就会获得应用程序可能需要的其他类.粒度很重要:不要太大,不要太小,恰到好处.

    请注意,System.Data.dll重新打开System.Xml并只添加一个类:XmlDataDocument.碰巧该类用于将关系数据解释为XML文档.如果您的应用程序只使用XML,则不需要此类.如果您的应用程序处理关系数据,它可能会.因此,虽然XmlDataDocument继承自XmlDocument并且位于System.Xml命名空间中,但它已打包在System.Data.dll程序集中.

    如果您有Java背景,那么这一切尤为重要,因为只有一个概念,即包.在.NET中有两个,即程序集和命名空间.两者是正交的.程序集显然可以包含多个名称空间.程序集可以重新打开命名空间并向其添加更多内容 - 换句话说,命名空间中的类型可能跨越多个程序集.

    2023-01-29 17:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有