FXCop: «Типы, которым принадлежат одноразовые поля, должны быть одноразовыми» - PullRequest
1 голос
/ 29 мая 2009

Я начал возиться с FXCop против некоторых своих сборок и заметил кое-что интересное, что я пытаюсь обернуть вокруг себя.

"Типы, которые объявляют одноразовых членов Также следует реализовать IDisposable. Если тип не владеет какой-либо неуправляемой ресурсы, не реализуйте финализатор на нем. "

У меня есть свой собственный класс, который содержит некоторые элементы управления, которые в свою очередь наследуются от System.Web.UI.WebControls.Button. Это не жалоба на мои унаследованные кнопки, но класс, который их оборачивает.

Какое здесь влияние или опасность?

Ответы [ 3 ]

4 голосов
/ 29 мая 2009

Если ваш класс содержит типы IDisposable, но ваш класс не IDisposable, то возможно, что типы IDisposable в вашем классе не удаляются / освобождаются вовремя, когда экземпляр вашего класса больше не нужен. Одноразовые типы следует утилизировать, как только они вам больше не понадобятся, чтобы ресурсы были освобождены. Если вы этого не сделаете, вам придется подождать, пока GC заработает, ресурсы также будут освобождены.

2 голосов
/ 29 мая 2009

Как вы знаете, когда вы заканчиваете использовать одноразовый объект, вы должны вызвать его Dispose метод.

Когда вы наследуете от этих элементов управления, все еще можно вызвать метод Dispose. Но если вы создаете оболочку, то пользователь вашего класса оболочки может вызвать Dispose.

public void Dispose() {
    button.Dispose();
    // any other thing that is disposable
}
1 голос
/ 29 мая 2009

Какова природа класса, содержащего кнопки?

Обычно я ожидал бы, что класс, который является составным элементом управления, будет иметь другие элементы управления в качестве членов. Такой класс обычно наследуется прямо или косвенно от System.Web.UI.CompositeControl или System.Web.UI.WebControl, и элементы управления, которые вы используете как члены, должны быть добавлены в коллекцию Controls.

Это обеспечит их правильную утилизацию и избавит от предупреждения FxCop.

Опубликуйте более подробную информацию о классе, если это не поможет.

...