每次我寫一些簡單的getter(獲取剛剛返回成員值的函數)我想知道爲什麼oop語言只有一個「只讀」訪問修飾符,它允許讀取對象成員的值,但不允許你像C++中的const事物那樣設置它們。爲什麼oop語言沒有「只讀」訪問修飾符?
私有的,受保護的公共訪問修飾符爲您提供完整(讀/寫)訪問權限或無權訪問權限。
編寫一個getter並每次調用都很慢,因爲函數調用比訪問成員要慢。一個好的優化器可以優化這些getter調用,但這是'魔術'。我不認爲學習某個編譯器的優化器如何工作並編寫代碼來利用它是不錯的主意。
那麼,爲什麼我們需要編寫訪問器,在實踐中隨處可用的只讀接口,只需要一個新的訪問修飾符就可以實現這個功能?
ps1:請不要告訴'它會破壞封裝'。一個公衆foo.getX()
和一個公開的但只讀foo.x
會做同樣的事情。
編輯:我沒有寫清楚我的帖子。抱歉。我的意思是你可以在外面讀取會員的價值,但是你不能設置它。您只能在類作用域中設置它的值。
你的ps1假定一個Property Getter總是簡單地封裝一個字段變量,但並非總是如此。例如,屬性getter可能是一個包含多個字段,字段連接等的計算。屬性getter封裝了邏輯,因此可以輕鬆更改內部實現。 – 2010-07-17 11:12:41
爲了迴應您的編輯,Marcelo Cantos的答案或我的將完全適合您的需求。 – BoltClock 2010-07-18 13:13:25