我有一个类,我认为制作静态更有意义,因为它基本上是一个实用程序类。作为本课程的一部分,我正在与 Microsoft Access 和 Microsoft Excel 进行互操作。
显然,Office Interop 对象是非托管资源,静态类不能有析构函数。我觉得只有一个Excel.Application
对象实例和Access.Application
我的各种方法可以使用的对象实例是有意义的,注意关闭我的数据库和工作簿,并适当地处理错误。
当我关闭程序时,我的问题就出现了,如果我不运行System.Runtime.InteropServices.Marshal.ReleaseComObject("myOfficeApplicationInstance");
,Office 实例会在我的任务管理器中徘徊。如果我在我的应用程序运行时释放该对象,那么我将无法再次使用它。
我不确定这一切是否有意义,所以下面有一些代码:
using System;
using Excel = Microsoft.Office.Interop.Excel.Application;
using Access = Microsoft.Office.Interop.Access.Application;
namespace QWERTY
{
internal static class CreateReport
{
private static readonly Excel _excel;
private static readonly Access _access;
static CreateReport()
{
_excel = new Excel();
_access = new Access();
}
internal static void Performance(DateTime reportDate)
{
_excel.Workbooks.Open(@"C:\whatever.xlsx");
//Do stuff with Excel
_excel.Workbooks.Close();
_access.OpenCurrentDatabase(@"C:\whatever.accdb");
//Do stuff with Access
_access.CloseCurrentDatabase();
}
}
}
几个问题
- 我对这应该是一个静态类吗?
- 使用完静态类后如何处理非托管资源?