2011-09-04 396 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

相關問題