两个类,相同的方法,一个对象?

mro*_*haw 4 c#

我正在开发一个使用Oracle的"Siebel CRM"产品的C#项目.Siebel提供了两个名称空间和类,用于以编程方式连接到它的服务,具体取决于您是要连接到服务器还是连接到客户端会话:

SiebelBusObjectInterfaces.SiebelDataControl
TWSiebelLib.SiebelWebApplication
Run Code Online (Sandbox Code Playgroud)

SiebelDataControl公开了一种显式登录基于服务器的资源的特定方法:

bool SiebelDataControl.Login(string connString, string userName, string passWord)
Run Code Online (Sandbox Code Playgroud)

所有其他方法在两个类之间是相同的..

我目前正在维护我的两个版本的应用程序 - 每个版本对应一个不同的连接类.随着我构建的功能越来越具有包容性和复杂性,将这两个应用程序分开维护变得非常困难.我已将连接部分拆分为它自己的类,但我仍然需要在开发时在应用程序之间复制和粘贴代码.

理想情况下,我想要一个VS解决方案,它有一个我所有自定义代码的实例和一些逻辑,用于确定用户决定使用哪两个连接类.

从理论上讲,我想要的是:

class SiebelAppWrapper {

    public Object m_SiebelAppInstance;
    private Boolean m_isConnected;
    private short m_conType;

    public static short SERVER_CON = 1;
    public static short CLIENT_CON = 2;

    public SiebelAppWrapper(short conType) {
        if (conType == SERVER_CON) {
            m_SiebelAppInstance = new SiebelDataControl();
          } else if conType == CLIENT_CON {
            m_SiebelAppInstance = new SiebelWebApplication();
        } 
        m_conType = conType;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,由于显而易见的原因,编译器对此并不满意.

我对C#和.NET开发一般都很陌生,所以我希望有一些方法可以在不复制所有dependend代码的情况下合并这两个类.

非常感谢您的帮助.

Jon*_*Jon 11

根据您的描述,它听起来像一个可行的选择:

  1. 创建一个界面ISiebelWhatever,描述您将要使用的两个类之间的所有常用功能.
  2. 派生两种类型,每种类型一种,并实现这些新类型ISiebelWhatever.
  3. 使用ISiebelWhatever的类型m_SiebelAppInstance.

当然,这只有在源类不是sealed这样的情况下才有效,并且对签名不相同的方法没有帮助.此外,通用接口方法有点明显,这引出了一个问题:源库是否已经有可能实现这一点?或者这两个班级有共同的基础?你应该先检查一下.

如果有两个类之间没有共享但你需要使用的方法,那么你还需要决定一个共同的签名(声明ISiebelWhatever)并让你的两个子类通过适当地转发到它们现有的非共享来实现它.方法.