<t>L'instruction lock est traduite par C# 3.0 de la façon suivante :<br/>
<br/>
var temp = obj;<br/>
<br/>
Monitor.Enter(temp);<br/>
<br/>
try<br/>
{<br/>
// body<br/>
}<br/>
finally<br/>
{<br/>
Monitor.Exit(temp);<br/>
}<br/>
<br/>
```<br/>
<br/>
En C# 4.0 [cela a changé](https://ericlippert.com/2009/03/06/locks-and-exceptions-do-not-mix/) et est maintenant généré comme suit :<br/>
<br/>
```<br/>
bool lockWasTaken = false;<br/>
var temp = obj;<br/>
try<br/>
{<br/>
Monitor.Enter(temp, ref lockWasTaken);<br/>
// body<br/>
}<br/>
finally<br/>
{<br/>
if (lockWasTaken)<b