[問題] 如何讓物件無法被更改?

看板C_Sharp (C#)作者 (下一夜)時間5年前 (2020/04/24 16:23), 5年前編輯推噓1(1011)
留言12則, 5人參與, 5年前最新討論串1/1
我知道C#有const這個關鍵字 但是像Bitmap這樣的物件就無法這麼用 如果我寫了一個函式如下 public Bitmap MakeFixedImage(){...} 我該如何禁止取得圖片的人去修改這張圖? 還是只能註解說這張圖有其他地方也在用 拜託別隨便修改 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.78.198 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1587716610.A.756.html

04/24 16:38, 5年前 , 1F
你是有個原始的Bitmap放進MakeFixedImage()改
04/24 16:38, 1F

04/24 16:39, 5年前 , 2F
不想讓別人動到原始的那個Bitmap??
04/24 16:39, 2F
類似 因為我會從其他地方借Bitmap來用 而傳出去的image未必一定會被修改(例如單純塞給pictureBox做顯示) 想修改的話應該自己copy一份 var newOne = new Bitmap(MakeFixedImage()); 我是希望能從程式碼就確保不會被修改啦 ※ 編輯: eye5002003 (36.229.78.198 臺灣), 04/24/2020 17:02:36

04/24 16:58, 5年前 , 3F
你回傳一個複製的複本啊
04/24 16:58, 3F
我的情況一直生複本的話開銷太大(記憶體用量也會漲不停) ※ 編輯: eye5002003 (36.229.78.198 臺灣), 04/24/2020 17:04:32

04/24 17:12, 5年前 , 4F
每次複製的複本都指向同一個參考呢?
04/24 17:12, 4F

04/24 17:31, 5年前 , 5F
所謂參考就一定是同一塊記憶體啊
04/24 17:31, 5F

04/24 17:54, 5年前 , 6F
內部資料設private並且只提供get相關但不提供set?
04/24 17:54, 6F

04/24 17:55, 5年前 , 7F
另外不確定readonly這個關鍵字對你有沒有幫助
04/24 17:55, 7F

04/24 18:34, 5年前 , 8F
我是指改成不回傳,僅賦值到同一個全域變數,
04/24 18:34, 8F

04/24 18:52, 5年前 , 9F
嗯...本質還是一樣,不過GC後記憶體就會釋放了吧
04/24 18:52, 9F

04/24 19:37, 5年前 , 10F
同j大 把圖片設成private 用一個公開的物件getter指向pr
04/24 19:37, 10F

04/24 19:37, 5年前 , 11F
ivate物件
04/24 19:37, 11F

04/26 10:10, 5年前 , 12F
看來也只能這樣了,感謝各位!
04/26 10:10, 12F
文章代碼(AID): #1Ueg82TM (C_Sharp)
文章代碼(AID): #1Ueg82TM (C_Sharp)