作者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/cn.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