变量类型的.Net完全限定名称

3

在我的工作中,我经常看到这样的代码:

public void Test(Models.User.UserInfo userInfo, Models.User.UserParameter param)
   { ... }

个人而言,我更喜欢看到这样的东西:
public void Test(UserInfo userInfo, UserParameter param) { ... }

并在顶部导入。

您对此有何想法?最佳实践是什么?两者的优缺点是什么?我应该如何说服我的团队成员?

我认为第二个选项更清晰明了。

3个回答

5

我认为,一定要使用using指令。通常情况下,这只是由Visual Studio自动生成的代码。我从未见过有人故意手动编写此类代码。在我看来,确保所有人类可读的代码看起来像是人类编写的很值得。因此,我会添加using指令并缩短名称,这样代码就更容易阅读了,特别是当命名空间很长时。


同意。有时,如果名称在两个使用指令之间存在歧义,名称可能会是完全限定的,但这也可以通过指令中的别名解决。别名和完全限定名称之间的选择留给开发人员,以确定哪个更清晰自然,更适合支持该代码的人。 - David
这带来了一个有趣的后续问题:为什么自动生成的代码不能使用 using 指令?它对此过敏吗? - Jesse C. Slicer
@Jesse:我不确定为什么设计师们不倾向于生成使用指令。如果他们这样做的话,我也会很喜欢... - Jon Skeet
@Jesse:在命名冲突的情况下。(例如,如果您的命名空间中有一个类与标准的 .Net 类名发生冲突) - SLaks
@SLaks:嗯。一个好观点。我现在开始思考这个问题了。如果有一个折中方案就好了。xsd.exe的输出让我感到不舒服。 - Jesse C. Slicer
显示剩余2条评论

0

如果类型只在代码文件中使用一次或者可能使用两次,我倾向于使用完全限定名称。对于其他所有情况,我使用using

但这也取决于完整名称的长度。关键是编写美观、易读的代码。


0
在几乎所有情况下,我会说,importusing命名空间是最佳实践。这样做的另一个好处是早期降级:如果编译器找不到命名空间,它会发出警告。
需要完全限定名称(更正式地说,它不是完全限定的,您没有指定版本或密钥)的少数情况包括可能发生名称冲突的情况(即:当两个命名空间恰好具有相同的名称时,我经常看到许多供应商将其添加到库中的Util类)(请注意,您可以使用using别名类名)。或者当您需要将名称作为字符串限定时,但这是另一种用例(即,使用反射)。偶尔,在调试时使用FQN有所帮助,因为调试器不允许添加using指令。
如果您只使用名称一次,您可能会想使用FQN,但根据我的经验,您很快就会发现自己使用了命名空间的多个名称,并将其重构为在头文件中导入命名空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接