2011-09-04 85 views
4

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> 
+0

将'BlobCollection'别名到'Blobs'听起来好像是一个坏主意。它违背了标准的命名约定。多个Blob对于属性或字段名称有意义,但对于类型名称不适用。你的代码的读者将不得不读取别名行来理解正在发生的事情。在编程中,减少字符数以节省击键是一种假经济,除非您非常小心地对可读性产生零影响。 –

+0

@Merlyn:我知道这一点。让我们简单考虑一个SQL数据库,其中有一个“Blob”记录表:即使您设置了将表映射到C#BlobCollection表的“ORM”,您也可能会调用表Blob。那么为什么不应该用X(A)ML来完成呢? - .NET的标准命名准则并不一定适用于任何地方。 – stakx

+0

我很欣赏你对我的假设的挑战。我还没有看到任何关于XAML中的命名约定的文章,专门介绍这种情况。但是,XAML仍然是.Net代码 - 它只是一个用XML语言指定的对象树/初始化块。 'Blobs'是一个在你的数据层中有意义的抽象。我不会将该命名一直传播到UI层,因为我们在使用ORM时会改变命名的原因。 –

回答

2

我不知道,如果你能在XAML直接做走样,但它是最容易通过简单地继承集合中的代码(或赫克,重命名,如果集合类本身在XAML中使用别名名称不会将您的代码的其余部分)产生不利影响:

public class Blobs : BlobCollection {} 

它似乎没有必要要做到这一点,但它是所有我现在能想到的。

+1

我担心这是唯一的解决方案;但我希望有人知道只有XAML才能达到同样的效果。我已经更新了我的问题。 – stakx

+2

+1; @stakx:如果你将这些东西插入到生成或现有的代码中(你对OP的评论似乎表明了这一点),那么你仍然可以选择创建另一个只定义别名的程序集并导入它。如果这只是泛型支持,那么[看起来这样的支持可能已经存在于更新的XAML标准中?](http://msdn.microsoft.com/zh-cn/library/ee956431.aspx)。如果你不能使用更近期的XAML标准,还有其他问题[关于泛型支持的解决方法](http://stackoverflow.com/questions/185349/) –

+1

@Merlyn:感谢关于泛型支持的提示XAML 2009。更新我的问题,以反映它不仅仅是泛型。 – stakx

相关问题