2009-07-06 6 views

ответ

6

Visual Studio, сам по себе не имеет эту функцию, но с CodeRush вы можете иметь предупреждение времени проектирования и рефакторинг для вставки с использованием блоков, где это необходимо.

+2

ReSharper также сделает это. –

+0

CodeRush Xpress доступен даже БЕСПЛАТНО: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/ –

+0

FxCop и Genderme также сделают это (оба бесплатно) – Paco

1

Я не думаю, что это можно сделать во время компиляции.

Однако, это можно сделать во время работы.
Я создал абстрактный класс «Одноразовый» (который реализует IDisposable и реализует одноразовый шаблон). В финализаторе я выдаю Assert, когда вызывается finalizer, и объект не был удален.

я на основе этого на статью Яна Гриффитс:

http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking

+1

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

+0

Кроме того, вы могли бы просто использовать «System.ComponentModel.Component» –

0

Я не уверен, что если вы используете C# или VB, но в C#, то «лучшая практика» способ обрабатывать объекты типа IDisposable - это поместить код в используемый блок.

«Оператор using позволяет программисту указывать, когда объекты, использующие ресурсы, должны их выпускать. Объект, предоставленный оператору using, должен реализовать интерфейс IDisposable. Этот интерфейс предоставляет метод Dispose, который должен освобождать ресурсы объекта». - MSDN Link

НТНО,

Дана

+3

Это никоим образом не отвечает на вопрос. –

+0

Можно ли настроить Visual Studio 2008 на предупреждение, если я создам объект, который реализует IDisposable, а затем забудьте заключить его в блок использования? – ChrisW

2

Если включить FxCop Design правил он расскажет вам, когда вы не реализуете IDisposable и у вас есть элементы, которые реализуют IDisposable, как это:

class Program 
{ 
    private DataTable NotDisposed; 

    public Program() 
    { 
     NotDisposed = new DataTable(); 
    } 
    static void Main() 
    { 
    } 
} 
+0

FxCop отлично подходит для такого рода вещей. «Конечно, было бы неплохо, если бы визуальная студия действительно предупредила вас, если вы допустили ошибку, используя (или реализуя IDisposable), но черт возьми. –