多余的限定词有什么缺点吗?有什么好处吗?

时间:2020-03-06 14:24:33  来源:igfitidea点击:

例如,将其引用为System.Data.Datagrid而不是Datagrid。请提供示例和说明。谢谢。

解决方案

我们对所引用的类型非常明确,这是有好处的。尽管在相同的过程中我们会放弃代码的清晰度,但是对于我而言,这显然是不利的,因为我希望代码具有可读性和可理解性。我选择简短的版本,除非我在不同的命名空间中有冲突,而这只能通过显式引用类来解决。除非我使用以下关键字为它创建别名,否则:

using Datagrid = System.Data.Datagrid;

我认为并没有真正的弊端,只是可读性与实际花费的编码时间。通常,如果我们没有带有含糊不清对象的名称空间,那么我认为它并不是真正需要的。要考虑的另一件事是使用级别。如果我们有一种使用反射的方法,并且可以正常键入10次System.Reflection,那么这没什么大不了的,但是如果我们打算大量使用命名空间,那么我建议我们使用include。

实际上,完整路径是global :: System.Data.DataGrid。使用更合格的路径的目的是避免使用添加的using语句,尤其是如果引入另一个using会导致类型解析出现问题时,尤其如此。存在更多完全限定的标识符,以便在需要显式表示时可以显式,但是如果类的名称空间是明确的,则许多人都可以更清楚地使用" DataGrid"版本。

根据情况,额外的限定词将生成警告(如果这是多余的意思)。如果我们随后将警告视为错误,那将是一个非常严重的弊端。

例如,我曾经在GCC中遇到过这种情况。

struct A {
    int A::b; // warning!
}

好处是我们不需要为使用的所有内容添加导入,尤其是如果它是我们从特定名称空间中唯一使用的导入内容时,它还可以防止冲突。

当然,不利的一面是,代码的大小不断膨胀,使用特定的限定词越难理解。

我个人倾向于将导入用于大多数事情,除非我确定我将只使用一次或者两次来自特定名称空间的东西,所以不会影响代码的可读性。

我通常使用最短的形式,以保持代码尽可能的整洁和可读。毕竟,这就是使用指令的用途,VS编辑器中的工具提示为我们提供了有关类型出处的即时详细信息。

我还倾向于在COM互操作层中为RCW使用名称空间标签,以在代码中显式调用这些变量(它们可能需要特别注意生命周期和收集),例如

using _Interop = Some.Interop.Namespace;

在性能方面,没有上行/下行的空间。一切都在编译时解决,无论是否使用标准名称,生成的MSIL都是相同的。

在.NET世界中广泛使用它的原因是由于自动生成的代码,例如设计者标记。在这种情况下,最好完全限定类名称之类的名称,因为可能与我们代码中的其他类冲突。

如果我们拥有ReSharper之类的工具,它实际上会告诉我们我们不需要什么完全合格的引用(例如,通过将其灰显),从而可以将其拒之门外。如果我们经常在各种代码库中剪切代码,则必须完全限定它们的资格。 (再一次,为什么要一直剪切粘贴;这是一种不好的代码重用形式!)