C 中的readonly屬性

2021-08-20 16:23:00 字數 791 閱讀 9314

例如我們這裡有乙個類

class testclass2

public int showvalue()

}

而在另乙個類中使用它

class testclass

public void changetcvalue(int value)

public void show()

", tc.showvalue());

}}

我們看到雖然tc這個欄位是readonly的,但是可以使用方法來改變tc中somevalue的值。似乎這個「唯讀」失去了意義,因為可以修改它的值的話還叫什麼「唯讀」呢?

非也!從上面的**中我們可以看到,tc的型別是testclass2,是乙個引用型別。而引用型別是必須用new關鍵字為它分配了一塊記憶體以後它才能在後續**中工作的。也就是說,tc這個變數僅僅是一塊記憶體位址罷了。這裡的「readonly」 tc只是無法再重新更改它的引用,但它所引用物件的屬性是可以改變的。

那麼為什麼不用const呢?還是因為tc是引用,是動態分配記憶體的,不可能在編譯階段就確定它的位址,這點和值型別(包括string)是完全不一樣的。

當然,這裡的「位址不能修改」指的是在**中不能再對readonly變數進行再賦值,實際運**況中可能會遇到gc或反射改變記憶體的情況。但是在本文所說的環境下不必考慮。(2013-9-27 14:30修改)

所以,大膽放心的用readonly吧,這樣還可以防止不必要的再賦值,保證了這個物件的安全性。

ps:這樣的兩個類之間的關係事實上就是uml中的組合關係

readonly和disabled屬性的區別

標籤的readonly和disabled屬性的區別 在表單元素中,readonly和disable有類似之處,因為它們www.cppcns.com都可以將一些表單元素設定為 不可用 狀態,當然它們之間的區別是巨大xksenrjep的程式設計客棧,下面就介紹一下這個兩個屬性有哪些區別,希望能夠給需ww...

iOS KVO監聽readonly屬性

本文不是技術向的文章,僅記錄小弟我在開發中遇到的各種坑.先宣告乙個唯讀屬性name property nonatomic,strong,readonly nsstring name 這樣系統只會生成name的get方法而不會生成name的set方法 簡單來說kvo的實現原理是重寫了屬性的set方法,...

C 中 const 和 readonly 的區別

const 和 readonly 的區別,總是不太清楚,於是查了查資料。const 的概念就是乙個包含不能修改的值的變數。常數表示式是在編譯時可被完全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。如果 const int a b 1 b是乙個變數,顯然不能再編譯時就計算出結果,所以常量是不...