代码之家  ›  专栏  ›  技术社区  ›  james

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

  •  0
  • james  · 技术社区  · 15 年前

    我继承了一个C DLL的代码库,它是通过COM互操作调用的(或者已经描述过)。C代码还在内部使用COM对象来执行父应用程序的基本功能。

    我正在从代码中重构一些干巴巴的违规行为,因为在50或60个DLL中查找100000行代码的重复是低效的。我曾经遇到过在抽象基类中使用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() { }
    }
    

    在我看来,第二个例子看起来更好,并且给了我对内部对象更多的控制。

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

    COM对象处理的第二个基类实现不起作用的原因是什么?在我有限的测试中,它似乎工作得很好,但你们比我聪明。

    谢谢!

    1 回复  |  直到 13 年前
        1
  •  0
  •   joncham    13 年前

    没有任何涉及COM互操作的内容会使第二种情况与第一种情况有任何不同。请随意将字段的访问修饰符调整为private。