作者eye5002003 (下一夜)
看板C_Sharp
標題[問題] 如何讓物件無法被更改?
時間Fri Apr 24 16:23:28 2020
我知道C#有const這個關鍵字
但是像Bitmap這樣的物件就無法這麼用
如果我寫了一個函式如下
public Bitmap MakeFixedImage(){...}
我該如何禁止取得圖片的人去修改這張圖?
還是只能註解說這張圖有其他地方也在用
拜託別隨便修改
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.78.198 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1587716610.A.756.html
1F:→ sirius65482: 你是有個原始的Bitmap放進MakeFixedImage()改 04/24 16:38
2F:→ sirius65482: 不想讓別人動到原始的那個Bitmap?? 04/24 16:39
類似
因為我會從其他地方借Bitmap來用
而傳出去的image未必一定會被修改(例如單純塞給pictureBox做顯示)
想修改的話應該自己copy一份
var newOne = new Bitmap(MakeFixedImage());
我是希望能從程式碼就確保不會被修改啦
※ 編輯: eye5002003 (36.229.78.198 臺灣), 04/24/2020 17:02:36
3F:→ kobe8112: 你回傳一個複製的複本啊 04/24 16:58
我的情況一直生複本的話開銷太大(記憶體用量也會漲不停)
※ 編輯: eye5002003 (36.229.78.198 臺灣), 04/24/2020 17:04:32
4F:→ kobe8112: 每次複製的複本都指向同一個參考呢? 04/24 17:12
5F:→ eye5002003: 所謂參考就一定是同一塊記憶體啊 04/24 17:31
6F:→ james732: 內部資料設private並且只提供get相關但不提供set? 04/24 17:54
7F:→ james732: 另外不確定readonly這個關鍵字對你有沒有幫助 04/24 17:55
8F:→ kobe8112: 我是指改成不回傳,僅賦值到同一個全域變數, 04/24 18:34
9F:→ kobe8112: 嗯...本質還是一樣,不過GC後記憶體就會釋放了吧 04/24 18:52
10F:推 vi000246: 同j大 把圖片設成private 用一個公開的物件getter指向pr 04/24 19:37
11F:→ vi000246: ivate物件 04/24 19:37
12F:→ eye5002003: 看來也只能這樣了,感謝各位! 04/26 10:10