如何避免通过 pythonnet 在 python 中的 IDisposable 对象上显式调用 Dispose 方法?

How to avoid explicitly calling Dispose method on IDisposable object in python through pythonnet?

最近,我用 C#(一个小型​​库)开发了动态对象,我可以 link 我的 python 应用程序(如果我的命名不正确,请原谅)。我有一些 IDisposable 对象,它在构造函数中打开文件,然后在 Dispose() 方法中关闭它。该文件需要在对象的整个生命周期中保持打开状态。

我希望 Dispose() 方法会在最后一次实时引用后自动调用,但我必须显式调用它。

import clr
clr.AddReference("MyLibrary")
from MyLibrary import DynamicObject

然后在我的代码中进一步使用它:

def foo():
   my_obj = DynamicObject()
   ...
   my_obj().Dispose() # have to call it here
   return

此外,终结器也没有被调用。有没有办法使用终结器或 Dispose() 方法而不显式调用它们,或者 CLR 的垃圾收集器不知道我的 python 脚本中发生了什么? python 如何通过 python.net 进行通信?

谢谢 :-)

Dispose 不会自动调用。它在那里,因此无论使用 class 什么都可以在需要时使用它来处理非托管资源。终结器 自动调用,但这将在垃圾收集器决定执行时自动调用,而不是在实例超出范围后立即调用。

如果您想更轻松地管理 Dispose 通话,可以查看 using statement, which is supported by with in Python