스트림 개체에 대해 Close() 또는 Dispose()를 호출해야 합니까?
Stream, StreamReader 및 StreamWriter와 같은 스트림 개체, IDisposable 인터페이스를 구현합니다. 또한 Close()라는 공개 메서드도 있습니다. 이러한 메서드 간의 차이는 혼란스러울 수 있습니다.
메서드 구현
Reflector.NET을 사용하면 StreamWriter 및 StreamReader에 대한 Close() 메서드 구현을 검사할 수 있습니다.
// StreamWriter public override void Close() { this.Dispose(true); GC.SuppressFinalize(this); } // StreamReader public override void Close() { this.Dispose(true); }
Dispose(bool disposing) 방법 StreamReader:
protected override void Dispose(bool disposing) { if ((this.Closable && disposing) && (this.stream != null)) { this.stream.Close(); } if (this.Closable && (this.stream != null)) { this.stream = null; base.Dispose(disposing); } }
StreamWriter의 경우와 마찬가지로 Close() 메서드는 단순히 내부적으로 Dispose(true)를 호출합니다.
Close()와 Dispose()의 동일성
코드를 보면 Close()와 Dispose()를 모두 호출할 수 있음이 분명합니다. 행동에 영향을 주지 않고 스트림에서. 이들은 동일한 방법입니다.
모범 사례
Close()와 Dispose()는 서로 바꿔 사용할 수 있지만 다음을 사용하는 것이 좋습니다.
결론
Close() 또는 Dispose() 중 무엇을 사용할지는 선호도와 가독성의 문제입니다. 두 가지 방법 모두 지원되며 스트림 개체에 대해 동일한 기능을 갖습니다. 권장되는 방법은 가능하면 ( ... ) { ... }를 사용하고, 코드 명확성을 높이기 위해 필요한 경우 명시적으로 Close()를 호출하는 것입니다.
위 내용은 Close() 또는 Dispose(): 스트림 개체에 어떤 메서드를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!