当前位置: 代码迷 >> VB Dotnet >> SyncLock 话语 什么时候用Me作为lockobject
  详细解决方案

SyncLock 话语 什么时候用Me作为lockobject

热度:201   发布时间:2016-04-25 02:04:32.0
SyncLock 语句 什么时候用Me作为lockobject
在MSDN上看SyncLock 语句,http://msdn.microsoft.com/zh-cn/library/3a86s51t.aspx
里面说到一句:
不应使用 Me 关键字为实例数据提供锁定对象。 如果类之外的代码引用了您的类的实例,它可以使用该引用作为 SyncLock 块的锁定对象(与您的锁定对象完全不同),从而保护不同数据。 通过这种方式,您的类和其他类将相互阻止执行与它们无关的 SyncLock 块。 由于使用相同字符串的进程中的任何其他代码将共享相同的锁,所以对一个字符串进行相似锁定可能会有问题。

原文为:
You should not use the Me keyword to provide a lock object for instance data. If code external to your class has a reference to an instance of your class, it could use that reference as a lock object for a SyncLock block completely different from yours, protecting different data. In this way, your class and the other class could block each other from executing their unrelated SyncLock blocks. Similarly locking on a string can be problematic since any other code in the process using the same string will share the same lock.

这到底是什么意思,我看好多都在用Me啊。
------解决思路----------------------
这句话的意思,不是不让你使用 Me,是告诉你许多人都在滥用 Me。

如果大家都使用各自“局部的变量”做为锁定对象,仍然可以达到目的,但是就不至于因为大家都来滥用 Me 而互锁了。
------解决思路----------------------
这句话的翻译有误导:

“如果类之外的代码引用了您的类的实例,它可以使用该引用作为 SyncLock 块的锁定对象(与您的锁定对象完全不同),从而保护不同数据”

这句话应该翻译为“如果类之外的代码引用了您的类的实例,它可能也使用该引用作为 SyncLock 块的锁定对象,而保护与您的锁定对象要保护的、完全不同的数据”

有些翻译用那些“翻译软件”来工作、赚稿费,自己不带脑子。
------解决思路----------------------
永远都不要用Me(C#是this)作为lock对象。

你之所以看到有人这么写,是因为他们都错了。