具有相同方法的多个类
本文关键字:方法 | 更新日期: 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 模板通过您的通用方法生成分部类。