我在项目中有很多类需要都有一组相同的构造函数和一个公共方法。以下是此部分类的示例:
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
方法?
记住这一点:
答案 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模板用你的常用方法生成部分类。