冗余限定符有什么缺点吗?有什么好处?

时间:2008-09-19 03:29:50

标签: performance duplicates qualifiers

例如,引用某些东西作为System.Data.Datagrid,而不仅仅是Datagrid。请提供示例和说明。感谢。

7 个答案:

答案 0 :(得分:2)

您对所引用的类型非常明确,这是一个好处。虽然,在同一个过程中,你放弃了代码清晰度,这在我的情况下显然是一个缺点,因为我希望代码是可读的和可理解的。我选择短版本,除非我在不同的命名空间中存在冲突,这只能通过显式引用类来解决。除非我使用关键字使用以下命令为其创建别名:

using Datagrid = System.Data.Datagrid;

答案 1 :(得分:2)

实际上,完整路径为global::System.Data.DataGrid。使用更合格的路径的目的是避免使用额外的using语句,特别是如果引入另一个using会导致类型解析问题。存在更多完全限定的标识符,以便在需要显式时可以显式,但如果类的命名空间是明确的,则DataGrid版本对许多人来说更清晰。

答案 2 :(得分:2)

好处是您不需要为您使用的所有内容添加导入,特别是如果它是您从特定命名空间使用的唯一内容,它还可以防止冲突。

当然,缺点是代码会大小膨胀,并且越难以阅读,您使用的特定限定符就越多。

就个人而言,我倾向于在大多数情况下使用导入,除非我确定我只会使用来自特定命名空间的内容一次或两次,因此它不会影响我的代码的可读性。

答案 3 :(得分:2)

我通常使用可用的最短格式,以使代码尽可能干净和可读。毕竟,这就是使用指令的目的,VS编辑器中的工具提示可以为您提供关于类型出处的即时详细信息。

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

using _Interop = Some.Interop.Namespace;

答案 4 :(得分:2)

就业绩而言,没有上行/下行。在编译时解决所有问题,无论您是否使用完全限定名称,生成的MSIL都是相同的。

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

如果你有一个像ReSharper这样的工具,它实际上会告诉你你有什么完全合格的引用是不必要的(例如通过将它们变灰),这样你就可以把它们丢掉。如果您经常在各种代码库中剪切粘贴代码,那么完全限定它们是必须的。 (再说一遍,为什么你要一直做剪切粘贴;这是一种糟糕的代码重用形式!)

答案 5 :(得分:1)

我认为没有真正的缺点,只是可读性与编码的实际时间。一般来说,如果你没有带有模糊对象的命名空间,我认为不是真的需要它。另一件需要考虑的事情是使用水平。如果你有一个使用反射的方法,你可以输入10次System.Reflection,那么这不是什么大问题,但如果你计划使用命名空间,那么我会推荐一个包含。

答案 6 :(得分:1)

根据您的情况,额外的限定符会产生警告(如果这是多余的意思)。如果您将警告视为错误,则这是一个相当严重的缺点。

我在GCC中遇到过这种情况。

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