【发布时间】:2011-09-04 20:15:40
【问题描述】:
是否可以在 XAML 中为类型声明别名?
让我用一个例子来解释。鉴于这些类型声明...
namespace Somewhere
{
public class Blob { … }
public class BlobCollection : List<Blob> {} // "type alias" in C#
}
...以下(缩写)XAML 应该是有效的:
<BlobCollection xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="clr-namespace:Somewhere;…">
<Blob … />
<Blob … />
</BlobCollection>
我已经知道我可以通过继承定义类型别名之类的东西(参见上面的代码注释)。假设想在 XAML 中做同样的事情,我将如何更改 XAML 以便能够将 BlobCollection 引用为 Blobs?
<Blobs xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="clr-namespace:Somewhere;…">
<Blob … />
<Blob … />
</Blobs>
【问题讨论】:
-
将
BlobCollection别名为Blobs听起来是个坏主意。它违反了标准命名约定。复数的 blob 对属性或字段名有意义,但对类型名没有意义。您的代码的读者必须阅读别名行才能了解发生了什么。在编程中,减少字符数以节省击键是一种虚假的经济,除非您非常小心地对可读性造成零影响。 -
@Merlyn:我知道这一点。让我们简要考虑一个 SQL 数据库,其中有一个包含
Blob记录的表:即使您设置了将表映射到 C#BlobCollection的 ORM,您也可能会将该表称为Blobs。那么为什么不应该对 X(A)ML 做同样的事情呢? -- .NET 的标准命名准则不一定适用于所有地方。 -
感谢您对我的假设提出的挑战。我还没有看到任何关于 XAML 中的命名约定的文章专门解决了这种情况。然而,XAML 仍然是 .Net 代码——它只是一个用 XML 语言指定的对象树/初始化块。
Blobs是在您的数据层中有意义的抽象。我不会将该命名一直传播到 UI 层,原因与我们在使用 ORM 时会更改命名相同。 -
@Merlyn,我同意在任何地方使用相同的名称对于同时使用 X(A)ML 端 和 C# 端的人会有所帮助。但是,想象一下 (a) 在 C#/代码端有一个完全自动化的框架,而 XAML 作者只会直接使用顶级 C# 对象;或 (b) XAML 由某人编写,并由其他人在代码中使用。在这两种情况下,为每一方提供合适的词汇表实际上是有益的,在有意义的地方可能有所不同。 (顺便说一句,我感谢您的意见。)
-
做出深思熟虑的决定是这里最重要的部分。让自己受教条约束不是。我很高兴您的意见得到了考虑,如果它帮助您形成更具体的意见:)
标签: c# xaml alias type-alias