具有相同方法的多个类

本文关键字:方法 | 更新日期: 2023-09-27 18:35:43

我在一个项目中有许多类,它们都需要具有相同构造函数和 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方法?

请记住这一点:

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

具有相同方法的多个类

我建议选择组合而不是继承...

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

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
   }
}

如果你不能子类,那么抽象类就不是一个可行的解决方案,接口只会给你公共类符合的契约,而没有任何实现。

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

例如

private MYClassWithCommonFunctionality xyz = new MYClassWithCommonFunctionality();

然后。。。

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

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

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