MoS*_*Slo 3 c# namespaces using-directives
是的,我通常使用'using'指令如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AwesomeLib
{
//awesome award winning class declarations making use of Linq
}
Run Code Online (Sandbox Code Playgroud)
我最近见过这样的例子
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
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我明白我可以将USING放在我的命名空间声明中.如果您的命名空间位于同一个根目录(它们有条理),这样的事情对我来说是有意义的.
System;
namespace 1 {}
namespace 2
{
System.data;
}
Run Code Online (Sandbox Code Playgroud)
但嵌套命名空间呢?就个人而言,我会将所有USING声明留在顶部,您可以轻松找到它们.相反,它看起来像是遍布源文件.
在嵌套命名空间中以这种方式使用的USING指令是否有益处?比如内存管理还是JIT编译器?
Joh*_*n K 13
using运行时性能
在嵌套命名空间中以这种方式使用的USING指令是否有益处?比如内存管理还是JIT编译器?
因为您在询问运行时性能,所以请看一下源代码下面发生的事情.
如果您使用Microsoft的IL Diassembler工具查看已编译的IL代码(正如我们在此处所做的那样),无论程序员using在源代码中如何使用,您都会看到所有类名都是完全合格的.
在下面编译的IL代码示例中,虽然using在原始C#源代码文件中,但没有看到"快捷"机制.例如,IL描述了一个长,extends [System.Web]System.Web.UI.Page而C#将使用: Page,而且using 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)
Run Code Online (Sandbox Code Playgroud)
在编译的IL中,所有类都是完全限定的.
这意味着在运行时基于设计时间using语句没有性能优势或缺点.
编译时间
根据您在源代码中散布usings和namespaces的方式,可能会有更多或更少的关键字.编译器必须全部查看它们并对它们进行处理,但总体而言,编译性能对于这些微不足道的事情来说可以忽略不计,与编译器制作成品所需的所有事情相比.
设计时间的好处
命名空间是一种组织技术,using是一种在源代码级别管理它们的方法(并指示编译器如何使用它们,以便它可以相应地编译程序).当C#source指定时using System.Web.UI;,不会导入任何内容,并且文件大小不会变大(因为已经引用了程序集); 相反,using它只是在using所使用的范围内对该命名空间的内容实现更短的语法,无论是在整个文件范围内还是在文件内部声明的命名空间范围内.
程序员的好处是减少多个命名空间之间的模糊类名冲突,using如果它们被明智地使用的话.
源代码命名空间的组织在编译的IL代码中表示不同(如上例所示).