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

C# 基类中的COM对象-通过字段或属性访问?,c#,properties,com-interop,field,C#,Properties,Com Interop,Field,我继承了一个通过COM互操作调用的C#DLL代码库(或者已经描述过)。C#代码还在内部使用COM对象来执行父应用程序的基本功能 我正在重构代码中的一些干冲突,因为在50或60个DLL中发现100000行代码中的重复是低效的。我在抽象基类中遇到了COM对象的使用,我想对其进行一点标准化,但我还没有找到关于COM对象在C#中这种特殊使用的明确声明 我们的代码目前有几个包含COM对象的基类,编码如下: public abstract class SomeBaseClass() { protect

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

我正在重构代码中的一些干冲突,因为在50或60个DLL中发现100000行代码中的重复是低效的。我在抽象基类中遇到了COM对象的使用,我想对其进行一点标准化,但我还没有找到关于COM对象在C#中这种特殊使用的明确声明

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

public abstract class SomeBaseClass()
{
   protected IComObject comObject;

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

   protected SomeBaseClass() { }
}
public abstract class SomeBaseClass()
{
   private IComObject comObject;

   protected IComObject ComObject
   {
      get { return comObject; }
   }

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

   protected SomeBaseClass() { }
}
为了防止在Initialize()之外的中设置this.comObject,我想实现以下基类:

public abstract class SomeBaseClass()
{
   protected IComObject comObject;

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

   protected SomeBaseClass() { }
}
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对象处理的第二个基类实现不起作用有什么原因吗?在我有限的测试中,它似乎工作得很好,但你们比我聪明


谢谢

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

我不知道这个COM场景100%(因此不是答案),但作为一般规则,字段应该是private的,直到有非常好的理由不这样做。马克:谢谢,这也反映了我的想法。只是希望避免陷阱;(五)