IDisposable'ı uygulayan bir sınıfım var, çünkü bu özel ("yapıcıda başlatılan") özel bir üye "foo" özelliğine sahip. Beklenmedik bir şekilde foo'yu bertaraf etmemi istediğim bir CA2000 Kod Analizi hatası alıyorum. Ancak, bununla ilgilenmesi gereken sınıfımın Dispose() kodunda foo.Dispose() var.Neden CA2000'i kimliğimi kullanabileceğim bir sınıfın içinde kimliği olan özel bir üyeyle alıyorum?
Bazılarını aradım ve şaşırtıcı bir şekilde bir cevap bulamıyorum. Neyi yanlış yapıyorum? Açıkçası temel bir şeyi özlüyorum. Bunu aşmak için kodumu nasıl yazarım?
Benim VB kodu:
Public Class Bar
Implements IDisposable
Private Foo As SomeDisposableThing
Public Sub New()
Foo = New SomeDisposableThing() With {.name = "hello"}
End Sub
'''' snip ''''
Private disposedValue As Boolean = False ' To detect redundant calls '
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
If Foo IsNot Nothing Then Foo.Dispose()
End If
End If
Me.disposedValue = True
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
End Class
Yuck başlatmak getirmemektir. İleti: bir özelliği kullanmayın :( –
@Hans, bir alan olsa bile aynı davranışın olacağını düşünüyorum.Verileriniz bir istisna oluşturabilir (örneğin, örneğin ThreadAbort), böylece * tahmin ediyorum * FxCop Alanlar ve mülkler için eşit olarak ikaz ederdi. Bu teoriyi henüz test etmemiştim. – JaredPar
Denemedim, denedim. –