Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在嵌套名称空间中使用名称空间指令_C#_Namespaces_Using Directives - Fatal编程技术网

C#在嵌套名称空间中使用名称空间指令

C#在嵌套名称空间中使用名称空间指令,c#,namespaces,using-directives,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 } 我最近看到过这样的例子 using System; using System.Collections.Gen

对,我通常使用“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放在名称空间声明中。如果您的名称空间位于同一根目录中(它们是有组织的),那么这样的事情对我来说是有意义的

但是嵌套名称空间呢?就我个人而言,我会将所有使用声明放在顶部,这样您就可以很容易地找到它们。相反,看起来它们被散布在源文件中


在嵌套名称空间中以这种方式使用指令是否有好处?例如内存管理或JIT编译器?

当您处于不需要
系统数据的范围内时,最好不要让IntelliSense触发
系统。数据
成员只是为了搞乱您正在寻找的其他东西


关于一些性能问题-我认为您喜欢如何使用它并不重要…

生成的中间语言没有任何好处。由于CIL是JIT编译器的输入,因此也不受影响


既然您谈到的是最佳实践:最好的实践是每个文件只有一个类,因此您也只有一个名称空间。

using子句只帮助使代码更易于维护,它们不会影响代码的性能

这同样适用于名称空间——您可以将所有类放在全局名称空间中,并将它们命名为Class1、Class2等等,您的代码也可以执行。但维持下去将是一场噩梦

因此,它们都在那里帮助您,编码人员,它们不会影响已编译的代码。

来自:

  • 在命名空间中放置usingalias指令可以消除冲突类型之间的编译器混淆
  • 在单个文件中定义多个名称空间时,在名称空间元素范围内放置using指令将引用和别名
  • IL代码不反映使用
    运行时性能

    使用该软件有好处吗 在中以这种方式使用的指令 嵌套名称空间例如内存 管理层还是JIT编译器?

    因为您询问的是运行时性能,下面我们来看看源代码下面发生了什么

    如果您查看编译后的IL代码(正如我们在这里所做的),您将看到所有类名都是完全限定的,无论程序员如何在源代码中使用

    中,以下编译的IL代码示例注意,尽管原始C#源代码文件中有
    使用
    ,但没有看到“快捷方式”机制。例如,IL描述了一个长的
    扩展了[System.Web]System.Web.UI.Page
    ,而C#会使用
    :Page
    ,并且
    使用System.Web.UI(两个单独的语句)

    在编译的IL中,所有类都是完全限定的

    这意味着基于使用
    语句的设计时
    ,在运行时没有性能优势或劣势

    // ***** 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)
    
    编译时

    根据您在源代码中使用
    s和
    名称空间
    s分散
    的方式,可能会有更多或更少的关键字。编译器必须看到它们并处理它们,但总的来说,与编译器制作成品所必须做的所有事情相比,对于这样微不足道的事情来说,编译性能可以忽略不计

    设计时间优势

    名称空间是一种组织技术,
    使用
    是在源代码级别管理名称空间的一种方法(并指导编译器如何使用名称空间,以便它可以相应地编译程序)。当C#source使用System.Web.UI指定
    ,不导入任何内容,并且文件大小不会变大(因为程序集已在中引用);相反,
    使用
    只是对该命名空间的内容实施较短的语法
    ,从使用
    的范围内,无论是在整个文件范围内还是在文件内声明的命名空间范围内

    程序员的好处是,如果明智地使用多个命名空间
    ,则可以减少它们之间不明确的类名冲突


    源代码名称空间的组织在编译的IL代码中以不同的方式表示(如上面的示例所示)

    我认为微软的编码准则告诉你把using放在名称空间范围内,stylecop总是抱怨这一点。我个人更喜欢把它们放在文件的顶部。
    // ***** 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)