ca1901: يجب أن تكون تصريحات P/Invoke المحمولة
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
ca2215 |
Category |
Microsoft.Usage |
تعطيل تغيير |
غير فاصلة |
السبب
نوع تطبيق System.IDisposableيرث من نوع الذي يطبق أيضا IDisposable. Disposeأسلوب النوع inheriting لا يتصل Disposeالأسلوب للنوع الأصل.
وصف القاعدة
إذا كانت ترث نوعا من نوع disposable، يجب استدعاء Disposeطريقة الأساس اكتب من داخل الخاص به Disposeالأسلوب. استدعاء الأساس اكتب أسلوب يضمن تخلص أية موارد انشئت بواسطة الأساس عند إصدار نوع.
كيف إلى الإصلاح انتهاكات
إلى إصلاح انتهاكا لهذه قاعدة، قم باستدعاء base.Disposeفي جهازDisposeأسلوب.
عند إلى منع التحذيرات
هو الأمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة في حالة الاستدعاء base.Disposeيحدث عند المستوى استدعاء أعمق من اختبارات قاعدة.
مثال
يلي مثال يظهر على نوع TypeAالذي يطبق IDisposable.
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
يظهر المثال التالي على نوع TypeBالتي ترث من نوع TypeAو بشكل صحيح باستدعاء به Disposeالأسلوب.
Imports System
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Protected Overrides Sub Finalize()
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub
End Class
End Namespace