이 SomeDisposable의 팩토리 실제로 래퍼한다는 IDisposable :: 폐기()
public class Wrapper : SomeDisposable
{
public new /*:(*/ Dispose() { ... };
}
워치 독의 종류를 반환/창조라고 가상하고 발신자는 Wrapper.Dispose()
은
using (SomeDisposable sd = SomeDisposableFactory.Create(...))
{
} // Wrapper.Dispose() never called.
처럼 사용 결코 부르지 않았다. Dispose()
이 가상이면 Wrapper.Dispose()
이 호출됩니다.
인터페이스는 다른 모범 사례 방법 virtual Dispose(bool)
이 실제로 존재하거나 실제로는 존재할 수 없도록 (권장되는 패턴 일뿐) 가상으로 구현되도록 보장하지 않습니다. 인터페이스는 현재 가상의 제약을 허용하지 않습니다.
이 특정 딜레마를 해결했을 권장 패턴 Dispose()
을 만들지 않은 것에 대한 찬반론은 무엇입니까? C#에서는 인터페이스를 통해 가상 메서드를 강제 적용 할 수 있어야합니다 (추상 클래스는 계약 정의로 널리 사용되지 않으므로).
new' 거의 항상 나쁜 생각 '사용. 코드 분석을 사용하는 경우 실제로 Disse (bool) 메소드를 포함하여이 패턴을 검사하는 * IDisposable을 올바르게 구현하는 경고가 있습니다. http://msdn.microsoft.com/en-us/library/ms244737.aspx –
Found [중복] (http://stackoverflow.com/questions/3619490/why-should-dispose-be-non-virtual) – crokusek