我确信代码会产生相同的结果,但CLR会在分配内存时考虑未使用的命名空间指令吗?另一个问题是CLR在分配内存时会考虑未使用的代码块吗?
答案 0 :(得分:3)
在运行时,无论代码中是否有未使用的using
指令,都不会产生影响。
using
指令是为了方便起见,以便您可以编写
using System.IO;
[...]
string path = Path.GetDirectoryName(filename);
而不是写出完全限定名称
string path = System.IO.Path.GetDirectoryName(filename);
每次要使用System.IO
命名空间中的类型时。该指令告诉编译器哪些名称空间要搜索文件中使用的类型。然后,编译器将实际用第二个示例替换第一个示例,即程序集中的IL代码将始终使用完全限定的类型名称。未使用的命名空间不会出现在已编译的程序集中。
但是,有理由保留导入的名称空间的清单。 John Feminella在related question中说:
有几个原因你想要 带他们出去。
- 这是毫无意义的。他们没有增加任何价值。
- 令人困惑。该名称空间使用了什么?
- 如果你不这样做,那么你将逐渐积累无意义的使用 代码转换时的语句 时间。
- 静态分析较慢。
- 代码编译速度更快。
答案 1 :(得分:1)
要添加到0xA3的答案:using
指令仅存在于C#源代码中。与注释一样,它们在汇编二进制文件中不存在。