基类中的COM对象 - 通过字段或属性访问?

时间:2010-01-17 22:19:53

标签: c# properties com-interop field

我继承了通过COM-interop调用的C#dll代码库(或者已经描述过)。 C#代码还在内部使用COM对象来执行父应用程序的基本功能。

我正在重构代码中的一些DRY违规行为,因为在50或60个dll中查找100,000行代码中的重复是低效的。我在抽象基类中遇到了COM对象的使用,我想稍微标准化一下,但是我没有找到关于C#中COM对象的这种特殊用法的明确说明。

我们的代码目前有几个包含COM对象的基类,编码如下:

public abstract class SomeBaseClass()
{
   protected IComObject comObject;

   protected virtual void Initialize(IComObject comObject)
   {
      this.comObject = comObject;
   }

   protected SomeBaseClass() { }
}

为了防止在除Initialize()之外设置this.comObject,我想像这样实现这些基类:

public abstract class SomeBaseClass()
{
   private IComObject comObject;

   protected IComObject ComObject
   {
      get { return comObject; }
   }

   protected virtual void Initialize(IComObject comObject)
   {
      this.comObject = comObject;
   }

   protected SomeBaseClass() { }
}

在我看来,第二个例子看起来更好,让我可以更好地控制内部comObject。

目前,现有派生类(C#)不直接设置基类comObject,而是使用Initialize(),但没有什么可以阻止它们直接分配给基类comObject。我想防止将来可能在Initialize()之外分配comObject的错误。

是否有某些原因导致COM对象处理的第二个基类实现不起作用?在我的有限测试中,似乎工作正常,但你们比我更聪明。

谢谢!

1 个答案:

答案 0 :(得分:0)

没有涉及COM Interop的任何内容会使第二种情况与第一种情况有所不同。您可以随意将字段的访问修饰符调整为私有。