A menudo veo código como el que es shown here, es decir, donde se asigna un objeto y luego se utiliza como un "objeto de bloqueo".Bloquear en un objeto
Me parece que puede usar cualquier objeto para esto, incluido el evento en sí mismo como el objeto de bloqueo. ¿Por qué asignar un nuevo objeto que no hace nada? Según entiendo, llamar a lock() en un objeto no altera realmente el objeto en sí mismo, ni bloquea su uso, simplemente se utiliza como marcador de posición para el anclaje de múltiples instrucciones de bloqueo.
public class Shape : IDrawingObject, IShape
{
// Create an event for each interface event
event EventHandler PreDrawEvent;
event EventHandler PostDrawEvent;
object objectLock = new Object();
// Explicit interface implementation required.
// Associate IDrawingObject's event with
// PreDrawEvent
event EventHandler IDrawingObject.OnDraw
{
add
{
lock (objectLock)
{
PreDrawEvent += value;
}
}
remove
{
lock (objectLock)
{
PreDrawEvent -= value;
}
}
}
}
Así que mi pregunta es, ¿es realmente una buena cosa que hacer?
(ver actualización, por cierto) –