W moich zajęciach implementuję IDisposable w następujący sposób:
public class User : IDisposable
{
public int id { get; protected set; }
public string name { get; protected set; }
public string pass { get; protected set; }
public User(int UserID)
{
id = UserID;
}
public User(string Username, string Password)
{
name = Username;
pass = Password;
}
// Other functions go here...
public void Dispose()
{
// Clear all property values that maybe have been set
// when the class was instantiated
id = 0;
name = String.Empty;
pass = String.Empty;
}
}
W VS2012 moja analiza kodu mówi, aby poprawnie zaimplementować IDisposable, ale nie jestem pewien, co zrobiłem źle.
Dokładny tekst jest następujący:
CA1063 Implement IDisposable poprawnie Podaj możliwą do zastąpienia implementację Dispose (bool) w polu „User” lub oznacz typ jako zapieczętowany. Wywołanie Dispose (false) powinno tylko wyczyścić zasoby natywne. Wywołanie Dispose (true) powinno oczyścić zarówno zasoby zarządzane, jak i natywne. stman User.cs 10
Dla porównania: CA1063: poprawnie zaimplementuj IDisposable
Przeczytałem tę stronę, ale obawiam się, że tak naprawdę nie rozumiem, co należy tutaj zrobić.
Jeśli ktoś może wyjaśnić w bardziej lamerski sposób, na czym polega problem i / lub jak należy wdrożyć IDisposable, to naprawdę pomoże!
IDispoable
wtedy, gdy masz niezarządzane zasoby do usunięcia (obejmuje to niezarządzane zasoby, które są opakowane ( SqlConnection
,FileStream
itp.) Nie można i nie należy wdrożyć IDisposable
, jeśli tylko udało zasobów, takich jak tutaj. To jest, IMO, poważny problem z analizą kodu. Jest bardzo dobry w sprawdzaniu głupich małych reguł, ale nie sprawdza się w sprawdzaniu błędów koncepcyjnych.
Dispose
?