C#中DLL和Namespace的关系高级问题在这里:今天花了很多时间自学基本的高级概念,比如API,静态库和动态库,DLLs并在C#中编组。获得所有这些知识使我看起来像是一个非常基本的问题,并且可能显示出我对这些概念的理解存在漏洞:我所知道的:我没有得到的:我的印象是实际方法在DLL中中定义。当我得到的所有函数都是名称空间时,我的程序如何才能找到DLL中定义的实际函数?顶部的“使用XYZ.dll”而不是“使用XYZ_namespace”对我来说似乎更直观。非常感谢你帮我填补这里的空白。编辑:修改帖子以特定于C#。编辑2:对于其他想知道他们的C#应用程序如何通过“使用namespaceX”实际获取类型的人,这里有一个很好的资源(除了下面有用的帖子):http://broadcast。奥雷利。com/2010/07/understanding-c-namespaces-and.html。基本上,您要使用的类型驻留在库中,您必须设置VisualStudio以引用这些库,以便您可以在代码中“使用”它们的命名空间。在C#中,DLL(也称为程序集)包含类(和其他类型)。这些类型通常有很长的全名,例如System.Collections.Generic.List。这些类型可以包含方法。在“参考”区域中,您可以参考程序集(这是.csproj文件的一部分)。在.cs文件中,您不需要包含任何引用此DLL的用法,因为它已经在.csproj文件引用中。如果您包含一行,例如usingSystem.Collections.Generic;使用System.Collections.Generic;,它告诉C#编译器在键入List时查找System.Collections.Generic.ListList。但是,您不需要这样做:只需键入System.Collections.Generic.List.DLL包含许多我们可能希望在我们的程序中使用的例程/方法部分正确。.NetDLL包含包含成员(字段、常量、方法、属性、事件、运算符、索引器)的类。.Net是严格的OOP,它不允许代码“浮动”。一切都在类中定义。在名称空间中组织类只是为了保持命名的分离和组织。将命名空间视为包含一个或多个类的“文件夹”,并且可以在一个或多个程序集(DLL)中定义。例如,System命名空间中的类在2个程序集(DLL)中定义:mscorlib.dll和System.dll。同时,这两个程序集包含了很多不同的命名空间,所以你可以把Assembly到Namespace的关系看成是多对多的关系。当您将using指令放在C#代码文件的开头时,您告诉编译器“我想使用此命名空间定义的类,无论它们来自哪个程序集”。您将能够在当前项目引用的所有程序集中使用在此命名空间中定义的所有类。我的印象是实际的方法是在DLL中定义的。当我得到的所有函数都是名称空间时,我的程序如何才能找到DLL中定义的实际函数?通过静态或动态绑定和程序集绑定找到正确代码的过程。当编译你的代码时,如果你写错了代码或忘记添加引用,静态绑定会告诉你:ClassInADiferentAssembly.M();//通常这会静态绑定并在您忘记包含对DifferentAssembly的引用时导致编译器错误,除非您是Handle动态或反射,否则您有静态绑定。程序集绑定是一个不同的过程。整个过程比较复杂,但基本上程序集是在GAC中发现的,当前位置,或者你甚至可以自己处理事件AppDomain.AssemblyLoad。所以当你添加using语句静态绑定时可以成功的在上下文中找到正确的代码。但是,如果程序集稍后无法在运行时绑定,您仍然会收到运行时错误。DLL是动态链接库的缩写。并且它可以是一个包含类、方法等的类库,它们都可以放在不同的命名空间下。首先,您必须将对DLL的引用添加到您的项目中。完成后,您可以使用诸如“using”之类的关键字来基本上缩短该特定命名空间中方法/类的路径。命名空间示例Namespace.Something.SomethingMore.Finally.Just.One.MoreNamespace.Something.SomethingMore.Finally.Just.One.More2要访问这些命名空间下的类,您可以使用Namespace.Something执行以下任一操作。SomethingMore.Finally.Just.One.More;使用命名空间.Something.SomethingMore.Finally.Just.One.More2;//现在您可以访问那些命名空间下的类,而无需键入整个命名空间//就像在下面的行中Class.GetData();如果您不使用,您仍然可以访问这些类。但随后必须键入Namespace.Something.SomethingMore.Finally.Just.One.More.Class.GetData();命名空间.Something.SomethingMore.Finally.Just.One.More2.AnotherClass.GetData();DLL有一组函数。您可以通过以下两种方式之一调用这些函数:链接DLL导出库(lib文件)或在运行时执行链接:调用LoadLibrary()调用GetProcAddress并提供所需函数的名称。您需要将其转换为实际类型(函数指针)。通过新的函数指针调用函数。非常简单的东西,只需阅读MSDN。C++命名空间只是函数名的一部分。您可以使用称为DependencyWalker的工具来查看从DLL导出的函数。以上就是C#学习教程的全部内容:C#中DLL与命名空间的关系。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
