我开始讨论FXCop对付我的一些程序集,并注意到一些有趣的东西,我正试图包围我的脑袋。
“宣布一次性成员的类型 还应该实现IDisposable。如果 该类型没有任何非托管 资源,不实施 终结者。“
我有自己的类,其中包含一些控件,这些控件又从System.Web.UI.WebControls.Button继承。它并没有抱怨我继承的按钮,但包装它们的类是。
这里有什么影响或危险?
答案 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警告。
如果这样做没有帮助,请发布有关课程的更多详细信息。