在我的C ++背景中,我是使用范围解析运算符的支持者,例如
class Foo
{
std::list<int> m_list;
...
}
用于外部库,以便清楚使用哪个库。
现在在C#中我不知道是否有经验法则或最佳实践来了解应该通过using关键字包含哪些包以及哪些类应该是完全限定的。我认为这可能是一个主观问题,但我想知道最广泛的做法。
答案 0 :(得分:16)
我几乎从不完全限定名称 - 我总是使用using
指令。
如果我需要使用两个冲突的名字,我会给他们两个别名:
using WinFormsTextBox = System.Windows.Forms.TextBox;
using WebFormsTextBox = System.Web.UI.WebControls.TextBox;
根据我的经验,这很少出现。
我倾向于使自动生成的代码完全符合所有条件,只是为了简单和健壮。
答案 1 :(得分:3)
我认为C#中的保存优势是指令完全受限于你放置它们的文件。只要文件中的代码清楚使用它就会使用它们,它有助于代码的可读性。我办公室的另一个团队根本不使用它们 - 我认为这很疯狂,但他们提出了自己的规则并对它们感到满意。
答案 2 :(得分:1)
倾向于使代码更容易可读和可理解。
如果名称可能含糊不清并且它们不是常见的“最可能的情况”,那么完全/部分符合条件以明确这一点即使这会增加冗长也是明智的。
如果存在混淆但是一个候选人更有可能,那么只有在你不使用最常见案例的情况下才有资格。 常见示例是使用System.Collection.X类而不是System.Collections.Generics版本(可能用于后向兼容性)。在这种情况下,导入通用命名空间很好,任何非通用命名空间都是完全限定的。 这清楚地表明了您使用遗留代码的位置。
如果你要处理多个冲突并且由此产生的完全限定会使你的代码变得非常难以理解,那么使用别名将它们分开可能是有意义的但是你应该非常反对这样做,因为它使得生成的代码更容易物理阅读但更难以概念理解。 你已经注入了与更广阔世界不一致的元素。这使得类中的代码片段更难以单独理解 如果你必须这样做,请考虑别名,这些别名很清楚这些是别名,以表明他们应该查看using语句以确认真实类型。