在 C#中定义命名空间或类型别名是否有任何既定的命名或编码约定?
对于那些不知道的人,C# 语言有一个特性,可以在文件的本地定义命名空间和类型的别名。当与第三方库发生命名冲突以及缩短代码中的类型名称时,这可能很有用。下面是它的外观示例。
using Forms = System.Windows.Forms;
我在网上看到的大多数示例都倾向于使用未缩写的大写名称作为别名,例如上面示例中的别名Forms。在某些地方,包括官方 MSDN 页面,该页面解释了命名空间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的实际类型。为了在视觉上分离概念,我正在考虑遵循一些前缀约定,类似于在私有成员之前使用下划线“_”,以帮助区分类型别名和实际类型。但是,在我这样做之前,我想确保我没有重新发明轮子,因为可能已经有更成熟的约定。