2013-03-15 41 views
1

的性質我有了如下流類型的屬性,一類:清理問題,當一個類有流類型

public class Csv 
{ 
    private StreamReader streadReder; 
    private StreamWriter streamWriter; 
} 

是否需要實施IDisposable?如有需要,請提供鏈接。因爲它似乎有點令人困惑的刺激IDisposable

回答

2

是的,你應該在這樣的情況下實現IDisposable。代碼分析中甚至有一個設計警告:CA1001: Types that own disposable fields should be disposable

最簡單的實現看起來是這樣的:

public class Csv : IDisposable 
{ 
    private StreamReader streadReader; 
    private StreamWriter streamWriter; 

    public void Dispose() 
    { 
     if (streadReader != null) 
     { 
      streadReader.Dispose(); 
     } 

     if (streamWriter != null) 
     { 
      streamWriter.Dispose(); 
     } 
    } 
} 
+0

你如何運行分析?我正在使用VS 2012?我運行了Run Code Analysis,但沒有警告。是否還有其他類似的工具,如FoxCop,樣式,你會推薦? – Pingpong 2013-03-15 23:22:46

+0

您可以在項目屬性的代碼分析選項卡上選擇不同的規則集。例如,使用「Microsoft基本設計指南規則」將使此警告出現。 – 2013-03-15 23:32:14

+0

在我們的項目中,我們將StyleCop與ReSharper一起使用,這有助於維持一些合理的代碼質量和樣式一致性。 – 2013-03-15 23:37:44

1

如果Csv型擁有流資源,並負責他們的處置,那麼它應該實現IDipsosable以及和處置值

public class Csv : IDisposable { 
    ... 
    public void Dispose() { 
    streamReader.Dispose(); 
    streamWriter.Dispose(); 
    } 
} 
+0

這聽起來我在想什麼。謝謝! – Pingpong 2013-03-15 22:41:28