是否有可能使C#基類只能在編譯到其中的庫程序集中訪問,而使其他從子類繼承的子類公開?C#私有(隱藏)基類
例如:
using System.IO;
class BaseOutput: Stream // Hidden base class
{
protected BaseOutput(Stream o)
{ ... }
...lots of common methods...
}
public class MyOutput: BaseOutput // Public subclass
{
public BaseOutput(Stream o):
base(o)
{ ... }
public override int Write(int b)
{ ... }
}
在這裏,我想對BaseOutput
類是無法進入我的圖書館的客戶,但讓子類MyOutput
是完全公開的。我知道C#不允許基類具有比子類更多的限制性訪問,但是還有其他一些達到相同效果的合法方式嗎?
UPDATE
我對這個特殊的庫解決方案是讓基類public
和abstract
,並與記錄它「不要使用這個基類直接」。我還使基類internal
的構造函數有效地阻止外部客戶端使用或繼承該類。
(這是一個恥辱,因爲其他的O-O語言讓我有隱藏的基類。)
爲什麼不讓'BaseOutput'的內部構造函數能夠讓外部代碼不能從它繼承? –
@mikez:是的,這就是我所做的,請參閱上面的更新。 –
公共類與內部構造函數可能是一個更好的選擇(在我的答案示例) –