1

我开始对我的一些程序集使用 FXCop,并注意到一些有趣的东西,我正试图绕开我的脑袋。

“声明一次性成员的类型也应该实现 IDisposable。如果该类型不拥有任何非托管资源,请不要在其上实现终结器。”

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

这里有什么影响或危险?

4

3 回答 3

4

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

于 2009-05-29T16:24:59.200 回答
2

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

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

public void Dispose() {
    button.Dispose();
    // any other thing that is disposable
}
于 2009-05-29T16:26:38.327 回答
1

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

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

这样做将确保它们被正确处理,并且应该摆脱 FxCop 警告。

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

于 2009-05-29T17:10:35.943 回答