当需要多线程访问时,我一直在对值类型属性使用锁定。此外,我一直希望更加努力地应用适当的访问修饰符,尤其是在我的库代码中,这些代码开始在多个项目中变得有用。我已经编写了一些代码,并希望对其中的各种策略进行评论,以获取属性并锁定它们包装的成员变量。谢谢。
使用系统; 公开课程序 { 静态无效主要(字符串 [] 参数) { SomeValueType svt = new SomeValueType(); SomeReferenceType srt = new SomeReferenceType(); PermissionsAndLocking p = new PermissionsAndLocking(5, svt, srt); //无效的。 //pX = 6; //无效的 //p.Svt = new SomeValueType(); //无效的 //p.Svt.X = 1; //有效,但会更改p.Svt的副本,因为Svt是一个值类型。 SomeValueType svt2 = p.Svt; svt2.X = 7; //无效的 //p.Srt = new SomeReferenceType(); //有效,改变p.Srt的成员数据。 p.Srt.X = 8; SomeReferenceType srt2 = p.Srt; srt2.X = 9; Console.WriteLine("按任意键。"); Console.Read(); } } 公共类 PermissionsAndLocking { //_x 不能在类外更改。 //_x 不能“同时”改变它正在被访问??? 私有只读对象 _xLock = new object(); 私人int _x; 公共诠释 X { 得到 { 锁 (_xLock) { 返回_x; } } 私人集 { 锁 (_xLock) { _x = 值; } } } //_svt 及其成员不能分配给类外。 //_svt 不能在被访问的“同时”改变。 私有只读对象 _svtLock = new object(); 私人 SomeValueType _svt; 公共 SomeValueType Svt { 得到 { 锁 (_svtLock) { 返回_svt; } } 私人集 { 锁 (_svtLock) { _svt = 价值; } } } //private on set适用于=,但成员数据仍然可以被操作... //锁定未完成,因为引用被返回,可以稍后访问??? 私有只读对象 _srtLock = new object(); 私人 SomeReferenceType _srt; public SomeReferenceType Srt { 得到 { 锁 (_srtLock) { 返回_srt; } } 私人集 { 锁 (_srtLock) { _srt = 值; } } } public PermissionsAndLocking(int x, SomeValueType svt, SomeReferenceType srt) { _x = x; _svt = svt; _srt = srt; } } 公共结构 SomeValueType { 公共诠释 X; } 公共类 SomeReferenceType { 公共诠释 X; }