>

메소드를 재정의하고이 메소드에서 클래스 레벨 잠금을 획득해야합니다. 한 번에 여러 인스턴스에서 하나의 스레드만이 메소드에 들어가기를 원합니다. 누군가 이것을 달성하는 방법을 알려주시겠습니까?

정적 플래그 (잠금)를 만들고 재정의 된 메소드 본문에서 확인하려고했습니다. 그러나 그것은 좋은 생각이 아닌 것 같습니다.

class A
{
   protected virtual void Navigate()
   {
      //some stuff
   }
}
class B: A
{
    protected override void Navigate()
    {
       base.Navigate();
       //some suff
    }
}

참고 : 클래스 A를 수정할 수 없습니다.

  • 답변 # 1

    잠금 사용 ... 그러나 이것은 A가 다른 클래스에서 파생 된 적이 없어 잠금 기능을 재정의합니다.

    class A
    {          
       protected virtual void Navigate()
       {
          //some stuff          
       }
    }
    class B: A
    {
        private static object navLock = new object();
        protected override void Navigate()
        {
           lock(navLock) 
           {
             base.Navigate();
             //some stuff
           }
        }
    }
    
    

관련 자료

  • 이전 java - sonarqube 문제 - 이 상수 이름을 정규식 '^ [a-z] [a-z0-9] (_ [a-z0-9] +) $'와 일치하도록 변경하십시오
  • 다음 c# - Windows 양식, 개체가 다른 항목 앞에 나타 납니까?