'using namespace'表示在该命名空间下加载整个类型

时间:2013-07-25 05:13:05

标签: c# .net

说我有代码

using System;
using System.Windows.Forms;

class TestApp
{
   static void Main()
   {
     Console.WriteLine("Testing! 1, 2, 3");
     MessageBox.Show("Hello...");
   }
}

using System& System.Windows.Forms表示在运行时加载所有类型(在这些名称空间内),尽管我只使用在控制台上打印并显示消息框?

并且在执行时加载所需类型(Console& MessageBox)也会消耗任何内存......

[并且会有一些代码块(在Console内)仍然未被源代码使用但仍然会被加载? ]

所以任何关于幕后发生的事情的线索(至少10行代码)都会有所帮助......

2 个答案:

答案 0 :(得分:7)

using语句只是编译时语句,允许编译器在每次使用时都没有指定完全限定名称的情况下查找引用的类型,它们在运行时加载任何东西,否则就不会如果直接引用相同类型,则加载。

答案 1 :(得分:0)

是所有类型直接在命名空间中,所以没有子命名空间。这意味着有许多使用会增加编译*时间。但它对运行时没有影响,因为到那时已经没有使用了,并且每个命名空间的使用都已转换为对该类型的直接引用。

*这意味着它表示“加载符号”的部分,实际上并不总是必须这样做。因此,我工作的重要解决方案需要30秒才能加载所有符号,但大多数编译都非常快,因为它不需要重新加载符号。

编辑@xCoder: 这与装配如何工作有关,没有类,只有数据。因此,使用更高级语言的类每个都编译成不同的汇编代码,因为类处理数据的方式不同。 C#使用IL而不是汇编,我不确定,但这可能与之类似。