У меня есть простой класс MyDataClass с членом (obj ), который реализует IDisposable :
public class MyDataClass : IDisposable
{
private DisposableObject obj;
private List<string> list;
private int c;
public MyDataClass()
{
obj = new DisposableObject();
list = new List<string>();
c = 114;
}
public void Dispose()
{
obj.Dispose();
}
}
public class DisposableObject : IDisposable
{
public void Dispose()
{
// Free resource
Console.WriteLine("Dispose DisposableObject");
}
}
. Когда я запускаю анализ кода, я получаю предупреждение CA1063, которое показывает мне, что я должен вызвать GC.SuppressFinalize()метод в Dispose()метод в реализации MyDataClass .
И я действительно смущен этим предупреждением CA1063. Потому что, насколько мне известно, я должен вызвать GC.SuppressFinalize()указать сборщику мусора:
«Эй, GC, не беспокойся об этом объекте, потому что я уже сделал всю работу по уборке за тебя!»
Так что подтвердите, ошибаюсь я или нет. Если я добавлю GC.SuppressFinalize()Я избавлюсь от CA1063, но это приведет к тому, что GC не будет очищать мой объект. Так что у меня будет утечка памяти, потому что другие члены класса (управляемый код )не будут очищены.