C#在嵌套命名空间中使用namespace指令
是的,我通常使用’using’指令如下
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AwesomeLib { //awesome award winning class declarations making use of Linq } 我最近见过这样的例子 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AwesomeLib { //awesome award winning class declarations making use of Linq namespace DataLibrary { using System.Data; //Data access layers and whatnot } } 当然,我明白我可以将USING放在我的命名空间声明中.如果您的命名空间位于同一个根目录(它们有条理),这样的事情对我来说是有意义的. System; namespace 1 {} namespace 2 { System.data; } 但嵌套命名空间呢?就个人而言,我会将所有USING声明留在顶部,您可以轻松找到它们.相反,它看起来像是遍布源文件. 在嵌套命名空间中以这种方式使用的USING指令是否有益处?比如内存管理还是JIT编译器? 解决方法
IL Code不反映C#使用
运行时性能
因为您在询问运行时性能,所以这里将介绍源代码下发生的情况. 如果你用Microsoft’s IL Diassembler tool查看已编译的IL代码(正如我们在这里所做的那样),无论程序员在源代码中如何使用,你都会看到所有的类名都是完全合格的. 在下面编译的IL代码示例中,尽管在原始C#源代码文件中使用了is,但没有看到“快捷”机制.例如,IL描述了一个long扩展[System.Web] System.Web.UI.Page,而C#将使用:Page并使用System.Web.UI; (两个单独的陈述). // ***** Compiled MSIL CODE **** // Notice all fully qualified classes throughout. // .class public auto ansi beforefieldinit WebApplication1.process extends [System.Web]System.Web.UI.Page { .field family class [System.Web]System.Web.UI.HtmlControls.HtmlForm form1 .method family hidebysig instance void Page_Load(object sender,class [mscorlib]System.EventArgs e) cil managed { // Code size 95 (0x5f) .maxstack 4 .locals init ([0] string strName,[1] string strTime) IL_0000: nop IL_0001: ldarg.0 IL_0002: call instance class [System.Web]System.Web.HttpRequest [System.Web]System.Web.UI.Page::get_Request() IL_0007: ldstr "name" IL_000c: callvirt instance string [System.Web]System.Web.HttpRequest::get_Item(string) 在编译的IL中,所有类都是完全限定的. 这意味着在运行时基于使用语句的设计时间没有性能优势或缺点. 编译时间 根据您在源代码中分散您的使用和命名空间的方式,可能会有更多或更少的关键字.编译器必须全部查看它们并对它们进行处理,但总体而言,编译性能对于这个微不足道的事情来说可以忽略不计,与编译器制作成品所需要做的事情相比. 设计时间的好处 命名空间是一种组织技术,使用是一种在源代码级别管理它们的方式(并指示编译器如何使用它们,以便它可以相应地编译程序).当C#source使用System.Web.UI;指定时,不会导入任何内容,并且文件大小不会变大(因为已经引用了程序集);而不是使用简单地在使用using的范围内对该命名空间的内容实现更短的语法,无论是在整个文件范围内还是在文件内的声明的命名空间范围内. 程序员的好处是减少了多个命名空间使用之间的模糊类名冲突,如果它们被明智地使用的话. 源代码命名空间的组织在编译的IL代码中表示不同(如上例所示). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |