2009-07-06 11 views

Odpowiedz

6

Visual Studio, sama w sobie nie ma tej funkcji, ale z CodeRush można mieć projektowych ostrzeżenia czasowych i refaktoryzacji wstawić przy użyciu bloków w razie potrzeby.

+2

ReSharper również to zrobi. –

+0

CodeRush Xpress jest nawet dostępny BEZPŁATNIE: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/ –

+0

FxCop i Genderme zrobią to również (oba za darmo) – Paco

1

Nie sądzę, że można to zrobić w czasie kompilacji.

Można to jednak zrobić w czasie wykonywania.
Utworzyłem abstrakcyjną klasę "Jednorazowe" (która implementuje IDisposable i implementuje wzór Jednorazowy). W finalizatorze wystawiam Assert po wywołaniu finalizatora, a obiekt nie został usunięty.

Mam ten oparty na artykule Ian Griffiths:

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

+1

będę argumentować przeciwko posiadające klasę bazową dla obsługi unieszkodliwianie . Ponieważ .NET jest dziedziczeniem pojedynczym, blokuje to dostęp do bardzo ścisłego łańcucha dziedziczenia, który wymaga, aby baza DisposeBase była na szczycie. –

+0

poza tym można po prostu użyć "System.ComponentModel.Component" –

0

Nie jestem pewien, czy używasz C# lub VB, ale w języku C#, „najlepsza praktyka” sposobem uchwyt obiektów typu IDisposable to umieszczenie kodu w bloku używającym.

"Instrukcja using umożliwia programistom określenie, kiedy obiekty korzystające z zasobów powinny je zwolnić. Obiekt dostarczany do instrukcji using musi implementować interfejs IDisposable, który udostępnia metodę Dispose, która powinna zwolnić zasoby obiektu." - MSDN Link

HTH,

-Dan

+3

To w żaden sposób nie odpowiada na pytanie. –

+0

Czy program Visual Studio 2008 można skonfigurować tak, aby wyświetlał ostrzeżenie, jeśli utworzę obiekt implementujący IDisposable, a następnie zapomnę zamknąć go w bloku używanym? – ChrisW

2

Jeśli włączysz FxCop opracować przepisy powie to, kiedy nie wdrażają IDisposable i masz członków, które implementują IDisposable, tak:

class Program 
{ 
    private DataTable NotDisposed; 

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

FxCop świetnie nadaje się do tego rodzaju rzeczy. "Oczywiście byłoby dobrze, gdyby studio wizualne ostrzegało cię, jeśli popełniłeś błąd używając (lub implementując IDisposable), ale do cholery. –