2009-07-06 26 views

Trả lời

6

Visual Studio, tự nó không có tính năng này, nhưng với CodeRush bạn có thể có những cảnh báo thời gian thiết kế và tái cấu trúc để chèn sử dụng các khối khi cần thiết.

+2

ReSharper cũng sẽ làm điều này. –

+0

CodeRush Xpress thậm chí có sẵn MIỄN PHÍ: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/ –

+0

FxCop và Genderme cũng sẽ làm điều này (cả miễn phí) – Paco

1

Tôi không nghĩ rằng nó có thể được thực hiện tại thời gian biên dịch. Tuy nhiên,

tuy nhiên, nó có thể được thực hiện khi chạy.
Tôi đã tạo một lớp trừu tượng 'Dùng một lần' (triển khai IDisposable và triển khai mẫu Dùng một lần). Trong finalizer, tôi đưa ra một Assert khi finalizer được gọi, và đối tượng chưa được xử lý.

tôi đã dựa trên một bài báo của Ian Griffiths:

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

+1

tôi sẽ lập luận chống lại việc có một lớp cơ sở để xử lý xử lý . Vì .NET là thừa kế đơn, điều này khóa bạn vào một chuỗi thừa kế rất nghiêm ngặt đòi hỏi DisposeBase của bạn phải ở trên cùng. –

+0

bên cạnh đó bạn chỉ có thể sử dụng "System.ComponentModel.Component" –

0

Tôi không chắc chắn nếu bạn đang sử dụng C# hoặc VB, nhưng trong C#, các "thực hành tốt nhất" cách để xử lý các đối tượng của loại IDisposable là đặt mã trong một khối sử dụng.

"Câu lệnh sử dụng cho phép lập trình viên chỉ định khi nào các đối tượng sử dụng tài nguyên sẽ giải phóng chúng. Đối tượng được cung cấp cho câu lệnh sử dụng phải triển khai giao diện IDisposable. Giao diện này cung cấp tài nguyên của đối tượng." - MSDN Link

HTH,

-Dan

+3

Điều này không có bất kỳ cách nào trả lời câu hỏi. –

+0

Visual Studio 2008 có thể được cấu hình để cho tôi cảnh báo nếu tôi tạo một đối tượng thực hiện IDisposable, và sau đó quên để kèm theo nó trong một khối sử dụng? – ChrisW

2

Nếu bạn bật FxCop Thiết kế quy tắc nó sẽ cho bạn biết khi bạn không thực hiện IDisposable và bạn có các thành viên mà thực hiện IDisposable, như thế này:

class Program 
{ 
    private DataTable NotDisposed; 

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

FxCop thật tuyệt vời cho loại nội dung này. 'Tất nhiên nó sẽ được tốt đẹp nếu studio trực quan thực sự cảnh báo bạn nếu bạn đã thực hiện một sai lầm bằng cách sử dụng (hoặc thực hiện IDisposable), nhưng heck. –

Các vấn đề liên quan