4

说我有密码

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 行代码)都会有所帮助......

4

2 回答 2

7

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

于 2013-07-25T05:16:19.703 回答
0

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

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

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

于 2013-07-25T05:26:13.407 回答