c#是否使用IDisposable Dispose来处理临时COM对象?

问题描述 投票:1回答:1

要确保我需要创建的COM对象在我不需要它的时候就被释放出来,很简单,使用 using 语句。

using (dynamic a = new MyFooCOMApplication()) 
{ 
...
}

现在假设我有一个Foo COM对象。这个Foo对象有一个名为Fields的COM枚举,Fields本身也返回类型为Field的项目。假设Field对象有一个属性Value,我可以写这样的代码。

a.Fields("Test").Value

或者换句话说:

a.Fields.Item("Test").Value = 0;

通过这条语句,我们创建了两个临时对象: 一个是Fields类型,一个是Field类型。

现在我的问题是 C#是否可以为这两个临时对象隐式地使用一个using子句 或者我必须写:

using (dynamic fields=a.Fields) 
{
   using (dynamic field=fields.Item("Test")) 
   {
     field.Value = 0;
   }
}

我想澄清一下

  1. 我使用的是外部COM服务器 所以释放对象是绝对需要的。
  2. 调用GC.Collect并不是 "我觉得 "一个好的风格。即使成百上千的程序员都在用它。
  3. 代码本身又在Outlook的一个VSTO Addin里面。所以我想尽可能的干净工作。
c# com-interop idisposable using-statement
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.