我的类包含来自Interop的对象,并在其上调用一个方法,使其分配内容.它还公开了一个释放这些东西的方法,所以我希望我应该在Dispose()中调用它:
class MyClass : IDisposable
{
private DllName.ComClassName comInstance;
void SomeMethod()
{
comInstance = new DllName.ComClassName();
comInstance.AllocStuff();
}
public void Dispose()
{
comInstance.FreeThatStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我应该扩展所有这些以遵循Dispose模式.我没有其他一次性或非托管资源可以发布,所以假设comInstance被管理(不是Interop所做的那样,将非托管包装到托管?),我认为该模式解决了:
public void Dispose()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个泄漏除非我在MyClass的实例上显式调用Dispose(),这会使Dispose模式有缺陷?那么这是否意味着comInstance必须是非托管的,并且模式解析为:
public void Dispose()
{
DisposeComInstance();
GC.SuppressFinalize(this);
}
~MyClass()
{
DisposeComInstance();
}
private void DisposeComInstance()
{
if (comInstance != null)
{
comInstance.FreeStuff();
comInstance = null;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
有没有一种方法/工具可以自动将Java源代码从使用原始类型转换为使用泛型类型?
我有一些遗留代码,对原始类型有677个引用:
ArrayList 47
Vector 420
Hashtable 61
Enumeration 64
Class 7
Iterator 78
TOTAL 677
Run Code Online (Sandbox Code Playgroud)
现在我可以手动查看代码来推断泛型类型并替换,但这需要很长时间.