abstract class
的公共方法以锁定静态对象开始。调用了几个小的私有函数,其中一些函数使用成员变量(并且该成员变量仅用于这些私有函数,而不是其他任何函数)。像
private SomeType _SomeMember;
private static readonly object TheLock = new object();
public void DoSomething()
{
lock(TheLock)
{
Step1();
...
Step5();
...
Step9();
}
private void Step5()
{
...
_SomeMember.Blah();
...
}
现在我不得不在许多派生类中重写Step5()
。还意味着我必须将签名更改为protected virtual
。
现在ReSharper(版本10.0.2)开始抱怨同步不一致,正是我在基类_SomeMember
中使用Step5()
的地方(在派生类中,Step5()
为空):< / p>
ReSharper:
The field is sometimes used inside synchronized block and sometimes used without synchronization
我还注意到,当我创建功能protected
(没有virtual
),internal
或public
时会出现警告。
由于Step5()
仅从DoSomething()
调用,因此它看起来像是一个错误的警告。
或者我没有看到同步上下文丢失的位置?