XAML有可能为类型声明别名吗?是否可以在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”,您也可能会调用表Blob。那么为什么不应该用X(A)ML来完成呢? - .NET的标准命名准则并不一定适用于任何地方。 – stakx
我很欣赏你对我的假设的挑战。我还没有看到任何关于XAML中的命名约定的文章,专门介绍这种情况。但是,XAML仍然是.Net代码 - 它只是一个用XML语言指定的对象树/初始化块。 'Blobs'是一个在你的数据层中有意义的抽象。我不会将该命名一直传播到UI层,因为我们在使用ORM时会改变命名的原因。 –