상태 관리를 위해 IDisposable 사용
C에서 일반적인 패턴은 클래스 A의 생성자와 소멸자를 사용하여 시작 및 종료 조건을 처리하는 것입니다. 클래스 B의 경우 범위를 벗어날 때 알려진 상태를 보장합니다. 이는 순수한 RAII가 아니라 확립된 관행입니다.
C#에서는 using 및 IDisposable과 함께 유사한 접근 방식을 사용할 수 있습니다. 그러나 이 사용법은 다음과 같은 질문을 제기합니다.
질문: 예외 안전을 위해 "범위가 지정된 동작"을 획득하는 수단으로 using 및 IDisposable을 사용하는 것은 학대적인 것입니까?
답변:
일부 의견에서는 using 및 IDisposable의 사용법을 고려합니다. 학대가 되십시오. 이유는 다음과 같습니다.
예를 들어 다음을 고려하세요. 코드:
{ // Unlock the frobble this.Frobble.Unlock(); try { // May throw Foo(); this.Frobble.Fiddle(); Bar(); } finally { // Lock the frobble this.Frobble.Lock(); } }
이 코드는 잠금 해제 후 try 블록에 들어가기 전에 예외가 발생하면 froobble이 잠금 해제된 상태로 유지되는 문제에 취약합니다. 이러한 상태 변경을 처리하기 위해 using을 사용하면 이 취약점을 감지하기가 더 어려워집니다.
따라서 일반적으로 리소스 관리라는 의도된 목적으로 using을 사용하고 상태 관리에는 사용하지 않는 것이 좋습니다.
위 내용은 C#에서 상태 관리를 위해 'using' 및 'IDisposable'을 사용하는 것이 남용인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!