IDisposable을 올바르게 구현
사용자가 코드 베이스에서 IDisposable을 구현하는 동안 코드 분석 오류가 발생했다고 보고했습니다. 문제를 이해하기 위해 제공된 코드를 검토해 보겠습니다.
public class User : IDisposable { // ... public void Dispose() { // Clear property values id = 0; name = String.Empty; pass = String.Empty; } }
오류 메시지 CA1063은 IDisposable 구현이 잘못되었음을 나타냅니다. Microsoft 문서에 따르면 클래스에 관리되지 않는 리소스나 일회용 개체에 대한 참조가 있는 경우에만 IDisposable을 구현해야 합니다. 주어진 코드 조각에서 선언된 속성 중 폐기가 필요한 속성은 없습니다.
이 문제를 해결하기 위해 수정된 구현은 다음과 같습니다.
public class User : IDisposable { // ... public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // In this case, there are no managed resources to dispose } // Also, there are no unmanaged resources to dispose } }
이 구현은 기본적으로 보호된 속성의 사용이 다릅니다. Dispose 메서드의 키워드입니다. 이렇게 하면 파생 클래스만 Dispose를 사용할 수 있습니다. 클래스 자체에는 일회용 리소스가 포함되어 있지 않으므로 Dispose 메서드 내에 정리 코드가 없는 것이 적절합니다.
위 내용은 관리되지 않는 리소스가 사용되지 않을 때 IDisposable을 올바르게 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!