В замешательстве. CA1063 ошибается? GC.SuppressFinalize (это)

У меня есть простой класс 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 не будет очищать мой объект. Так что у меня будет утечка памяти, потому что другие члены класса (управляемый код )не будут очищены.

7
задан mdn 3 August 2012 в 09:37
поделиться