使用相同方法的多个类

时间:2012-05-29 18:59:40

标签: c# .net oop

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

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方法?

记住这一点:

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

3 个答案:

答案 0 :(得分:2)

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

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

E.G。

private MYClassWithCommonFunctionality xyz = new MYClassWithCommonFunctionality();

然后......

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

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

答案 1 :(得分: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
   }
}

答案 2 :(得分:1)

如果你不能创建一个实现你的通用功能的基类(任何理由?),你可能会使用T4模板用你的常用方法生成部分类。