0

我在一个项目中有很多类都需要有一组相同的构造函数和 1 个公共方法。下面是这个部分类的一个例子:

public partial class SHIPMENT_LINE
{
     private OracleConnection _rp = null;
     private EntityConnection _rpe = null;
     private static string _schema = "";

     public SHIPMENT_LINE() { }

     public SHIPMENT_LINE(BHLibrary.Configuration.ConnectionOption Environment)
     {
         SetConnection(Environment);
     }

     public void SetConnection(BHLibrary.Configuration.ConnectionOption Environment)
     {
         this._rp = Configuration.RPConnection(Environment);
         this._rpe = Configuration.RPEntityConnection(Environment, out _schema);
     }
}

SetConnection我需要在我创建的每个类上实现相同的私有变量、构造函数和方法。在这一切都存在于每个班级之后,那么每个班级都会做不同的事情,因此这些班级不一定都是相关的,除了它们都有相同的“开始”之外。

我应该如何构建这些类中的每一个,这样我就不必SetConnection在我创建的每个类中实现这个方法?

请记住这一点:

  • 由于其他限制,我不能从任何这些类中的另一个类继承。但是,如有必要,我可以使用接口。
4

3 回答 3

2

如果您不能子类化,那么抽象类不是一个可行的解决方案,接口只会为您提供通用类所遵循的合同,而无需任何实现。

我建议在公共类中实现公共功能,并将其用作其他类中的私有成员(IE 组合而不是继承)。您的其他类都可以实现一个接口以确保它们都具有相同的方法,并且它们可以将它们的调用转发到该方法的私有类实现。

例如

private MYClassWithCommonFunctionality xyz = new MYClassWithCommonFunctionality();

进而...

Private void MyCommonInterfaceMethod(object param)
{
    // Do derived class specific stuff here...
    xyz.MyCommonInterfaceMethod(param);
}

作为额外的奖励和一些前瞻性的思考......让公共类也共享相同的接口并将其实现传递给您的其他类构造函数。这样,将来您可以将实现换成另一个。

于 2012-05-29T19:04:19.817 回答
2

我建议去组合而不是继承......

让每个类实现一个接口,然后有另一个类(与这些类无关)也实现了接口并具有它的具体实现。您上面提到的所有类都应该有这个附加类的实例,并且只需调用它即可。

例子

public partial class SHIPMENT_LINE : ISetConnection
{
   private ConnectionSetter connector = new ConnectionSetter();

   public void SetConnection(BHLibrary.Configuration.ConnectionOption Environment)
   {
      this.connector.SetConnection(Environment);
   }
}

public class ConnectionSetter : ISetConnection
{
    public void SetConnection(BHLibrary.Configuration.ConnectionOption Environment)
   {
      // Implementation
   }
}
于 2012-05-29T19:06:15.307 回答
1

如果您无法创建一个将实现您的通用功能的基类(任何原因?),那么您可能可以使用 T4 模板通过您的通用方法生成部分类。

于 2012-05-29T19:02:38.927 回答