Я пишу метод утилиты, чтобы очистить ссылку на COM-объект.Общий метод для установки ссылочной переменной в функции вызывающего объекта на нуль
public class ComUtils {
public static void ReleaseObj(ref object comObj)
{
if (comObj != null)
{
Marshal.FinalReleaseComObject(comObj);
comObj = null;
}
}
}
Я хочу, чтобы вызвать этот метод так:
CommandData cmdData;
//cmdData = Acquire a CommandData object
ComUtils.ReleaseObj(ref cmdData);
я получаю ошибку компилятора, который говорит
не может конвертировать из исх CommandData в исй объект
Приведение CommandData в объект потеряет цель общего метода, h должен установить для ссылочной переменной значение null, после ее освобождения.
Есть ли решение? Я использую VS 2005, .NET 2.0
Спасибо.
Будет ли он работать в .NET 2.0? – AllSolutions
Да; дженерики были введены в 2.0. – SLaks
Ваш ответ отлично работает! Благодарю. Просто подумал об улучшении, например о том, можно ли передавать переменное количество аргументов любого класса по ссылке, например: public static void ReleaseAll (params ref T [] comObj), где T: class. Компилятор говорит, что параметр params не может быть объявлен как ref или out. Есть ли решение в C# 2.0 или, если нет, то в любой другой версии .NET? Я хотел бы называть его следующим: ReleaseAll (obj1, obj2, obj3) и т. Д. –
AllSolutions