CA1001: Typy, které vlastní jednorázových polí by mělo být na jedno použití
Název_typu |
TypesThatOwnDisposableFieldsShouldBeDisposable |
CheckId |
CA1001 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Bez konce - Pokud je typ není viditelný vně sestavení. Rozdělení - Pokud je typ viditelné mimo sestavení. |
Příčina
Třída prohlašuje a implementuje instanci pole, které je System.IDisposable typu a třídy neimplementuje IDisposable.
Popis pravidla
Třída implementuje IDisposable rozhraní nakládat nespravované prostředky, které vlastní.Pole instance, který je IDisposable typu označuje, že pole vlastní nespravované prostředku.Třída, která prohlašuje, IDisposable pole nepřímo vlastní nespravované prostředek a plnit IDisposable rozhraní.Pokud třída není vlastníkem přímo jakékoli nespravované prostředky, by neměly implementovat finalizačních metod.
Jak opravit porušení
Porušení tohoto pravidla opravíte implementovat IDisposable a z IDisposable.Dispose volání metody Dispose metoda pole.
Při potlačení upozornění
Nepotlačovat upozornění od tohoto pravidla.
Příklad
Následující příklad ukazuje třídy, která porušují pravidlo a třídy, která splňuje pravidla implementací IDisposable.Třídy finalizačních metod neimplementuje, protože třída nevlastní přímo jakékoli nespravované prostředky.
Imports System
Imports System.IO
Namespace DesignLibrary
' This class violates the rule.
Public Class NoDisposeMethod
Dim newFile As FileStream
Sub New()
newFile = New FileStream("c:\temp.txt", FileMode.Open)
End Sub
End Class
' This class satisfies the rule.
Public Class HasDisposeMethod
Implements IDisposable
Dim newFile As FileStream
Sub New()
newFile = New FileStream("c:\temp.txt", FileMode.Open)
End Sub
Overloads Protected Overridable Sub Dispose(disposing As Boolean)
If disposing Then
' dispose managed resources
newFile.Close()
End If
' free native resources
End Sub 'Dispose
Overloads Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub 'Dispose
End Class
End Namespace
using System;
using System.IO;
namespace DesignLibrary
{
// This class violates the rule.
public class NoDisposeMethod
{
FileStream newFile;
public NoDisposeMethod()
{
newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
}
}
// This class satisfies the rule.
public class HasDisposeMethod: IDisposable
{
FileStream newFile;
public HasDisposeMethod()
{
newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// dispose managed resources
newFile.Close();
}
// free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
Souvisejících pravidel
CA2213: By odbyt na jedno použití polí
CA2216: Na jedno použití typů by měla deklarovat finalizačních metod
CA2215: Metody Dispose by volání dispose základní třídy.
CA1049: Typy vlastních nativní zdrojů by měly být na jedno použití