我继承了一个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对象处理的第二个基类实现不起作用的原因是什么?在我有限的测试中,它似乎工作得很好,但你们比我聪明。
谢谢!