【发布时间】:2009-10-29 20:10:12
【问题描述】:
在 C# 中定义 namespace or type aliases 是否有任何既定的命名或编码约定?
对于那些不知道的人,C# 语言有一个特性,可以在文件的本地为命名空间和类型定义别名。当与第三方库发生命名冲突以及缩短代码中的类型名称时,这可能很有用。下面是它的外观示例。
using Forms = System.Windows.Forms;
我在网上看到的大多数示例都倾向于使用未缩写的大写名称作为别名,例如上面示例中的别名 Forms。在某些地方,包括 official MSDN page,它解释了名称空间 System.Collections 的别名为 colAlias 的示例。更复杂的是,有些人可能更喜欢根据定义的是命名空间别名还是类型别名来选择不同的准则。
为了说明我对别名指南感兴趣的原因,我将解释我在做什么。在最近的一个项目中,我开始简化一个模式,其中我有几个类继承自一个通用基类,该基类通过使用类型别名来接受复杂类型参数。
因此使用这种技术,一旦应用了类型别名,下面的复杂示例就会变得更具可读性。
public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
{
// ...
}
}
下面是必须使用类型别名的更简洁的版本。
using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!
public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
public override Result DoSomething(Algorithm operation)
{
// ...
}
}
虽然这看起来要简单得多,但很容易忘记像 Result 这样的别名实际上只是 List 的别名,并且没有称为 Result 的实际类型.为了在视觉上分离概念,我正在考虑遵循一些前缀约定,类似于在私有成员之前使用下划线“_”,以帮助区分类型别名和实际类型。不过,在我这样做之前,我想确保我没有重新发明轮子,因为可能已经有更成熟的约定了。
【问题讨论】:
标签: c# naming-conventions namespaces alias