我很好奇在使用using
导入静态类与导入“典型”方式与使用接收方显式调用方法之间是否存在运行时的性能损失,特别是当它上了相当大的一堂课。
例如,我当前的项目使用OpenGL,其中每个OpenGL函数都绑定到Gl
类中的静态方法。我选择将此类中的命名约定与它的本机对应名保持相同(即glClear
为Gl.glClear
)。
然后我使用这样的类:
using static OpenGL.Gl;
void SomeFunction()
{
glClear();
// etc, etc
}
...与此相反...
using OpenGL;
void SomeFunction()
{
Gl.glClear();
// etc, etc
}
除了命名约定之外,在这种情况下,是否有运行时代价将如此多的符号导入当前上下文(因为Gl
类具有数百个静态方法和公共常量)?
我并不真正在意编译时或IDE上提供智能感知的额外工作量,只关心编译后的最终结果。
我的感觉是,它只是语法糖,并且产生相同的IL代码,但是我不太精通阅读IL来自信地确定这一点。
答案 0 :(得分:4)
与编译器重写它相同。生成的中间语言代码甚至都不知道“用法”。
使用静态
...
如果您了解CIL,就知道CIL中并不真正存在名称空间的概念。类型和成员名称通常解析为其完全限定的名称。因此,使用static只是一个编译时的语法糖,使我们比以前更加懒惰。
PS。在这种情况下,CIL,IL和MSIL相同