Czy program Visual Studio 2008 można skonfigurować tak, aby wyświetlał ostrzeżenie, gdy zapomnę usunąć obiekt implementujący IDisposable?Czy program Visual Studio może ostrzegać mnie, gdy zapomnę o udostępnieniu obiektu IDisposable?
Odpowiedz
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.
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
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. –
poza tym można po prostu użyć "System.ComponentModel.Component" –
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
To w żaden sposób nie odpowiada na pytanie. –
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
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()
{
}
}
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. –
ReSharper również to zrobi. –
CodeRush Xpress jest nawet dostępny BEZPŁATNIE: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/ –
FxCop i Genderme zrobią to również (oba za darmo) – Paco