2013-03-24 22 views
2

我有一個C#類,它使用關鍵字爲一些公共屬性定義了的幾個別名。這會導致「不一致的可訪問性」編譯器錯誤,因爲別名定義的類型顯然不公開。我怎樣才能使別名定義的類型公開,以便錯誤消失?如何使用別名public來避免「不一致的可訪問性」錯誤?

// Alias defined at the top of the source file just below the other "using" 
// "using" statements that bring in the needed modules. 
using TDynamicStringArray = System.Collections.Generic.List<string>; 

// Public property defined with the type alias. 
public TDynamicStringArray Strs 
{ 
    ... 
} 

這裏是從編譯器收到的錯誤:

Error 2 Inconsistent accessibility: property type 'TDynamicStringArray' is less accessible than property 'Strs' 

我試圖把公共使用的前面,但不起作用。我看了幾個關於「不一致的可訪問性」主題的SO線程,但沒有看到任何涉及使用關鍵字使用創建的類型別名。

我使用別名的原因是因爲我從其他語言轉換了一些舊代碼,並且它簡化了轉換過程。否則,我只會使用不帶別名的基礎類型。

+5

出於興趣,我可能會錯過一些東西,但爲什麼當你可以使用'TDynamicStringArray'時,'List '就像寫入和讀取一樣容易? – 2013-03-24 22:01:54

+0

我同意@AshBurlaczenko,即使它是使用完全限定的名稱來定義,它似乎很愚蠢的使用別名 – finman 2013-03-24 22:09:08

+0

@AshBurlaczenko - 正如我在我的帖子中所說,我正在轉換舊的代碼和類型在舊代碼中交織的方式使得更容易使用別名。 – 2013-03-24 22:14:01

回答

2

不,你不能通過任何其他機制改變類型的可訪問性,但改變類型本身。

如果無法修改該類型的源,則唯一的選擇是將其封裝在自定義公共類型中。

+0

我有你的來源,你可以從我的帖子看到。你能舉個例子說明你在說什麼,因爲它適用於我的例子嗎?否則,我不知道有什麼建議。 – 2013-03-24 22:15:39

+0

@RobertOschler,對不起 - 我正在回答題目中的問題。我對你沒有發佈的代碼部分的理解是,你有一些其他類型具有相同(無別名)的名稱,它們具有較低的可訪問性。 – 2013-03-25 00:23:38

2

別名不定義類型;他們只是指一個現有的類型。沒有與別名關聯的可訪問性。

在你的例子中,List<string>是公開的,你不應該得到那個錯誤信息。我的猜測是你在某個地方有一個非公開的TDynamicStringArray類別,而別名根本沒有被使用。

+0

+1我支持,這很可能是這裏的問題。 – 2013-03-24 23:02:45