특정 상황에서 다음과 비슷한 클래스의 모든 예외를 처리하려면 어떻게해야합니까? ctor와 finalizer가 예외를 throw하는 C# 클래스의 모든 예외를 처리하려면 어떻게해야합니까?
class Test : IDisposable {
public Test() {
throw new Exception("Exception in ctor");
}
public void Dispose() {
throw new Exception("Exception in Dispose()");
}
~Test() {
this.Dispose();
}
}
내가 이것을 시도했지만 작동하지 않습니다 나는 또한 "사용"를 사용하는 것을 시도했다
static void Main() {
Test t = null;
try {
t = new Test();
}
catch (Exception ex) {
Console.Error.WriteLine(ex.Message);
}
// t is still null
}
을하지만 ~ 시험에서 던진 예외를 처리하지 않습니다();
static void Main() {
try {
using (Test t = new Test()) { }
}
catch (Exception ex) {
Console.Error.WriteLine(ex.Message);
}
}
어떻게 해결할 수 있습니까?
두 번째 경우 (사용하지 않음)에는 실제로 Dispose()를 호출하지 않습니다. C#은 가비지 수집되므로 GC가 정리할 시간을 결정할 때까지 클래스는 실제로 정리되지 않습니다.또한 GC는 Dispose를 호출하지 않으므로 (정의하더라도) '사용'을 사용하거나 IDisposable 클래스를 사용할 때 Dispose를 명시 적으로 호출해야합니다. –
답변 해 주셔서 감사합니다. 사실, Test 클래스는 저에게 쓰여진 것이 아니며, 단지 컨트롤 목적 밖에있는 비슷한 동작을 가진 클래스를 보여주는 데모 용입니다. 요점은 예외를 던지는 생성자는 Test 객체가 참조 변수가없는 반제품이라는 점입니다. – Frank