FXCop:“拥有一次性领域的类型应该是一次性的”

时间:2009-05-29 16:20:58

标签: c# fxcop

我开始讨论FXCop对付我的一些程序集,并注意到一些有趣的东西,我正试图包围我的脑袋。

  

“宣布一次性成员的类型   还应该实现IDisposable。如果   该类型没有任何非托管   资源,不实施   终结者。“

我有自己的类,其中包含一些控件,这些控件又从System.Web.UI.WebControls.Button继承。它并没有抱怨我继承的按钮,但包装它们的类是。

这里有什么影响或危险?

3 个答案:

答案 0 :(得分:4)

如果您的类包含IDisposable类型,但您的类不是IDisposable,那么当您的类的实例不再需要时,您的类中的IDisposable类型可能不会按时处理/释放。 一旦您不再需要它们,就应该处理它们,以便释放资源。如果你不这样做,你将不得不等到GC启动,然后资源也将被释放。

答案 1 :(得分:2)

如您所知,当您使用一次性对象时,应调用其Dispose方法。

当您从这些控件继承时,仍然可以调用Dispose方法。但是如果你创建了一个包装器,那么你的包装器类的用户应该能够调用Dispose

public void Dispose() {
    button.Dispose();
    // any other thing that is disposable
}

答案 2 :(得分:1)

包含按钮的类的性质是什么?

通常我只希望一个复合控件的类将其他控件作为成员。这样的类通常直接或间接地从System.Web.UI.CompositeControl或System.Web.UI.WebControl继承,并且作为成员的控件应该添加到Controls集合中。

这样做可以确保它们处理得当并且应该摆脱FxCop警告。

如果这样做没有帮助,请发布有关课程的更多详细信息。