Принудительное удаление () во время отладки - PullRequest
1 голос
/ 10 июня 2011

Я знаю, что это не стандартная практика, но есть ли минусы или лучшие альтернативы выполнению следующих действий?Я просто хочу убедиться, что код используется правильно, и .NET ничего не сделает для вас, чтобы обеспечить его.

public class MyClass : IDisposable
        public void Dispose()
        {
            // Some managed shutdown logic...
            GC.SuppressFinalize(this);
        }

#if DEBUG
        // Why is ConditionalAttribute not allowed if you can still achieve this with compiler directives?
        // [Conditional("DEBUG")]
        ~SFtpClient()
        {
            Debug.Fail("This class is IDisposable and should be wrapped by using {}");
        }
#endif
}

Ответы [ 2 ]

3 голосов
/ 10 июня 2011
2 голосов
/ 10 июня 2011

Это выглядит хорошо для меня, потому что это условие предотвратит ненужную стоимость финализации пустого финализатора в сборках RELEASE. Возможно, вы захотите добавить #if DEBUG вокруг GC.SupressFinalize.

[Conditional ("DEBUG")] говорит компилятору не вызывать метод, но метод все еще там. В любом случае, вы не можете скомпилировать вызов метода Finalize (). Финализатор GC не проверяет атрибут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...