CA1001: Atılabilir alanlara sahip olan türler atılabilir olmalıdır
TypeName |
TypesThatOwnDisposableFieldsShouldBeDisposable |
CheckId |
CA1001 |
Kategori |
Microsoft.Design |
Değişiklik kesiliyor |
Bölünemez - türü derleme dışında görünür değilse. Tür derlemenin dışından ise - kesiliyor. |
Neden
Bir sınıf bildirir ve bir örnek alan uygulayan bir IDisposable türü ve sınıf uygulamıyor IDisposable.
Kural Tanımı
Uygulayan bir sınıf IDisposable , sahibi olan yönetilmeyen kaynaðý býrakmanýz arabirimi.Bir örnek alan bir IDisposable türü gösterir alan bir yönetilmeyen kaynağın sahibi.Bildirir bir sınıf bir IDisposable alan, dolaylı bir yönetilmeyen kaynağın sahibi ve uygulamalısınız IDisposable arabirimi.Sınıf doğrudan yönetilmeyen herhangi bir kaynağa sahip olmadığından, bir sonlandırıcıyı uygulamamalıdır.
İhlalleri düzeltmek nasıl
Bu kuralı ihlal düzeltmek için uygulamak IDisposable ve IDisposable.Dispose yöntem çağrısı Dispose yöntemi alanının.
Uyarıları ne zaman
Uyarı Bu kuraldan bastırmak değil.
Örnek
Aşağıdaki örnek kuralını ihlal eden bir sınıf ve kuralı uygulayarak karşılayan bir sınıfı gösterir IDisposable.Sınıf sınıf doğrudan yönetilmeyen kaynakları sahibi değil çünkü bir sonlandırıcıyı uygulamıyor.
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);
}
}
}
İlgili kuralları
CA2213: Atılabilen alanlar atılmalıdır
CA2216: Atılabilir türler sonlandırıcıyı bildirmelidir
CA2215: Atma yöntemleri taban sınıf atmayı çağırmalıdır
CA1049: Yerel kaynaklara sahip olan türler atılabilir olmalıdır