По сути, вы не должны полагаться на ручной код для вызова Dispose () вашего объекта в конце работы. Возможно, сейчас у вас что-то вроде этого:
MyComHelper helper = new MyComHelper();
helper.DoStuffWithExcel();
helper.Dispose();
...
Вместо этого вам нужно использовать блоки try, чтобы перехватить любое исключение, которое может быть вызвано, и вызвать dispose в этой точке. Это канонический путь:
MyComHelper helper = new MyComHelper();
try
{
helper.DoStuffWithExcel();
}
finally()
{
helper.Dispose();
}
Это , поэтому обычно, что C # имеет специальную конструкцию, которая генерирует тот же точный код [см. Примечание] , как показано выше; это то, что вы должны делать большую часть времени (если у вас нет специальной семантики конструирования объектов, которая упрощает работу с ручным шаблоном, подобным описанному выше):
using(MyComHelper helper = new MyComHelper())
{
helper.DoStuffWithExcel();
}
EDIT
ПРИМЕЧАНИЕ. Фактический сгенерированный код немного сложнее, чем во втором примере выше, поскольку он также вводит новую локальную область, которая делает вспомогательный объект недоступным после блока using
. Это как если бы второй блок кода был окружен символами {}. Это было опущено для пояснения объяснения.