Если вы намереваетесь синхронизировать DoStuff
(и гарантируете его для любого подкласса), тогда вам лучше , а не , сделав его virtual
и используя protected virtual
член, чтобы сделать фактическую работу.
public void DoStuff()
{
lock(this.SyncRoot)
{
InternalDoStuff();
}
}
protected virtual void InternalDoStuff()
{
// do stuff
}
Это также дает вам возможность не lock
вводить в текущем коде (это означает, что DoStuff
просто вызывает InternalDoStuff
без другого кода), но все еще в состоянии вставить его в позже, не трогая ваш унаследованный код.
Что касается скорости, размещение оператора lock
не окажет никакого влияния.