2012年1月20日 星期五

[C#] private/public/protected 差別與用法



如果你曾經在別的程式語言寫過OOP,你也許對類別的方法存取限制不會太陌生。類別的方法的存取限制常見的有三種:public、protected以及private。


這三種存取限制,課文中的解釋大概是這樣:

public繼承是最常見的繼承方式。
在語法上public繼承的意義是讓衍生類別直接無條件全部繼承基底類別的介面,
而且衍生類別物件可以直接存取基底類別公開的成員,
而且衍生類別的指標或參考可以直接轉換為基底類別的指標或參考,
而public繼承在實際的意義是認定衍生類別「屬於」基底類別,
從另一個角度看衍生類別是一種特殊的基底類別。
private繼承則比較少見,
在語法上的意義是直接利用基底類別所實作的功能,
因為基底類別的所有函式或成員在衍生類別物件或衍生類別的後代類別的層級都不能存取,
因此外界可以對基底類別的功能一無所知。
而且衍生類別物件的參考或指標不能轉換成基底類別的指標。private繼承的實際意義並不存在,它只是一種實作的技術而已。
當您希望直接利用(並對其行為作小幅修改)一個類別的實作時,就可以使用private繼承,
但是大多數時候使用「包含」也可以達到類似的效果,
而且在程式碼的實際意義會更明顯,因此一般會優先考慮使用「包含」進行實作。
protected繼承則類似private繼承,
但衍生類別的後代類別可以存取基底類別的介面。


而白話一點的解釋大概會是像這樣:

public就是所有的人都可以直接存取
private是只有在類別內部才可以存取
protected差不多是在這兩者之間,比private寬鬆一些,但又沒有public那麼自在,只有在同一個類別內或是同一個package,或是繼承它的子類別可以自由取用

1 則留言: