2012-06-26 172 views
3

我有一個類ClassA這是其他類的基類。我希望這個類的構造函數是內部的並且是受保護的,所以它不能從我的程序集外部繼承和實例化(我不能將它封閉起來,因爲我有其他內部類繼承它,你可以看到我的其他相關問題here),所以我修改了它是這樣的:受保護的內部構造函數

public abstract ClassA{ 
    internal protected ClassA(){ 
    } 
} 

我已被告知,由於組合internal protected被解釋爲internal OR protected這顯然使得構造只有protected :((從可見這是不行的外面)

問題

  1. 如果是真的,爲什麼internal protected解釋爲internal OR protected而不是internalprotected
  2. 有沒有辦法可以聲明一個構造函數的內部和保護?

回答

6

指定內部就足夠了。

這是一個抽象類 - 這意味着它的構造函數是受保護的,因爲你不能創建它的一個實例 - 你不能繼承它。

+1

其實,這是不正確的。在大會之外,「保護」修改器仍在發揮作用。如果僅將空構造函數聲明爲「內部」,則可以繼承該程序集外的類,但不能向其中添加自定義構造函數。如果你讓它成爲「受保護的內部」,那麼你可以。 – RobinHood70

+1

@ RobinHood70我只是回答了他的具體查詢。在一般情況下,你是對的。 – Asti

4

如果您將構造函數指定爲內部它將對您的程序集中的所有類都可見,並且對於其它類以外的類將不可見,這正是您想要實現的。簡言之,如果一個構造或類A的類成員是:

  • 保護 - 可見於從A繼承在其和任何其它組件
  • 內部所有類 - 可見的所有類在A級的裝配
  • 保護的內部 - 可見於從A繼承其在任何其他組件和所有類在A的組件的所有類

因此,在你的情況下,你只需要指定構造函數爲內部。

相關問題