Si tengo¿Funcionan los bloqueos estáticos en diferentes clases de niños?
abstract class Parent
{
static object staticLock = new object();
public void Method1()
{
lock(staticLock)
{
Method2();
}
}
protected abstract Method2();
}
class Child1 : Parent
{
protected override Method2()
{
// Do something ...
}
}
class Child2 : Parent
{
protected override Method2()
{
// Do something else ...
}
}
Will llamadas a new Child1().Method1()
new Child2().Method1()
y utilizar la misma cerradura?
Y staticLock es "privado" (predeterminado para miembros http://msdn.microsoft.com/en-us/library/ms173121.aspx), por lo que no se puede acceder por clases secundarias. –
@AlexeiLevenkov Solo quiero garantizar que solo se llame a un 'Método2' en un instante, no necesito que las clases secundarias accedan a él. –
@JohnSaunders: No te estoy siguiendo. La idea aquí es tener un método * público * que * no sea invalidable * que garantice que * las personas que llaman * siempre tomen la cerradura. De esta forma, los autores de las clases derivadas pueden implementar Method2 sin tener que recordar "oh sí, tengo que cerrar aquí". Este patrón elimina un tipo de error pero, por supuesto, produce oportunidades para otro; ahora los autores de esas clases derivadas deben saber que se toma el bloqueo de clase principal y no provocar un punto muerto en él. –