【发布时间】:2015-08-24 20:24:43
【问题描述】:
我有以下 C# 代码
iSomeObject.MyPoint(SomeConstants.cpU, 2,
myInterface.MySystem.MyCustomType == OtherConstants.cpProjected ? Constants.cpU : Constants.cpT,
1, ref t1, ref t2, ref t3);
当我运行我的专有分析工具时,它说 myInterface.MySystem 导致资源泄漏。
class MyClass:MyInterface,IDisposable
{}
MyInterface myInterface = new MyClass();
我通过将实例 myInstance 强制转换回 IDisposable 并在其上调用 Dipose() 方法来显式处理它。
现在在 myInterface 上调用 MySystem 属性的 get 方法,其中(MySystem)是 IExampleInterface 类型,进一步实现如下代码:
class ExampleClass:IExampleClass,IDisposable
{}
我不确定在 myInterface 上调用 Dipose() 方法是否也会释放 MySystem 创建的资源,或者我是否也需要显式调用 Dispose() 方法。但是一切都发生在 IF 语句条件中,我不确定如何处理这种情况并让我的代码处理掉所有一次性对象,换句话说,我不确定这种情况下的 C# 语法以及如何处理处理概念在这种情况下。
任何建议将不胜感激。
【问题讨论】:
-
你能在你的界面上实现 IDisposable 吗?
-
您可以将
IDisposable添加到MyInterface吗?然后你就不需要任何类型的转换了,静态分析可以跟随整个事情。 -
@recursive 另一方面派生自
IDisposable对实现接口的类添加非常严格的要求 - 可能不适合许多情况。 -
这是一个遗留代码,我不应该对其进行任何更改。
标签: c# .net if-statement