我正在审查团队代码。我观察到他们通过在班级的上部ClassA
写作来使用班级;using AAA.BBB;
他们也曾使用过 class ClassB
by AAA.BBB.ClassB
。有两个基本问题。
- 使用上述场景时是否存在任何性能问题。推荐什么
- 当我声明命名空间时;是否所有类都加载了该命名空间。
请在这里提供帮助。谢谢。
我会尽我所能回答这些,我手头没有任何资源,只是经验(也许有人可以提供帮助)。
导入命名空间与直接调用命名空间相比没有性能问题。当编译器运行它时,您可以认为它最终始终是完全限定的。命名空间的 using 语句更多的是帮助开发人员,因此他们不必每次都完全限定它。实际上,对于您的ClassB
示例,可能是与定义相同类名的多个命名空间发生冲突。例如,Calendar
该类同时在System.Globalization
和中System.Web.UI
,因此在使用它们时您必须完全限定其中一个。
通常,所有代码都由它所在的项目编译成一个程序集。引用程序集中的任何代码都将加载所有关联的代码。但是请注意,在实际调用代码之前,不一定要编译代码以供 JIT 使用。
代码中的完全限定名称令人分心且嘈杂。我宁愿永远不要拥有它们。如果存在命名空间冲突,使用别名可以解决该问题。
仅适用于在不同命名空间中定义两个 Class 存在冲突的地方,即使那样,我仍然宁愿使用 using 来区分它们:
using MyClassB=AAA.BBB.ClassB;
// :
var myClassB= new MyNS();
在性能方面,你可以在这里看到答案:
using 指令只是在编译期间消失的语法糖。命名空间是否通过 using 包含或在完全限定的类型名称中提及与生成的字节码完全无关。因此,使用其中一种在运行时没有性能优势。
命名空间用于组织您的代码(同时防止名称冲突)。它们根本与性能无关。