Вопрос о дизайне. Я знаю, что этот метод является потокобезопасным, но с точки зрения дизайна, есть ли лучший способ сделать это?
У меня есть абстрактный класс (не потокобезопасный):
public abstract class Class1
{
protected someobject myobject;
public Class1()
{
myobject = new someoject();
}
public virtual void proc1()
{
// do something with my object
}
public virtual void proc2()
{
// do something with my object
}
public virtual void proc3()
{
// do something with my object
}
}
Теперь я хочу сделать потомком этого класса, который должен быть потокобезопасным, поэтому я делаю:
public class Class2: Class1
{
private static readonly object obj = new object();
public override void proc1()
{
lock(obj)
{
base.proc1();
}
}
public override void proc2()
{
lock(obj)
{
base.proc2();
}
}
public override void proc3()
{
lock(obj)
{
base.proc3();
}
}
}
Я мог бы сделать базовый поток безопасным, но у меня есть некоторые другие классы, которые наследуются от той же самой базы и не нуждаются в безопасности потоков, поэтому я не хочу навязывать ей безопасность потоков. Есть проблемы с таким дизайном? Это немного утомительно, если на базе много публичных членов ....