关于多态性的访谈测试

时间:2015-07-20 05:45:30

标签: c# polymorphism

我在求职面试中被问到,是否可以针对以下问题实施简单的解决方案:

  • 创建一个管理不同数据库的类。这个类基本上有3种方法:SeriesOpen()Close()
  • Dataset GetDataSet( .. )Open()对于所有数据库类型都相同。
  • 方法Close()对每种类型的服务器的行为都不同
  • 我需要在不使用“IF”句子的情况下实现这一点。
  • 调用这些方法的功能不会暴露给内部功能。
Dataset GetDataSet()

和此:

static void Main(string[] args)
{
    DBManager dbm = new DBManager();
    dbm.getDataSet();
}

1 个答案:

答案 0 :(得分:1)

尝试使用抽象基类,只需覆盖与基本实现(经典多态)不同的方法:

abstract class BaseDbManager {
    public void OpenConn() {
        //implementation goes here
    }
    public void CloseCon() {
        //implementation goes here
    }
    public abstract DataSet GetDataSet(...);
}

然后为每种数据库类型使用继承的类:

class OracleDbManager : BaseDbManager {
    public override DataSet GetDataSet(...) {
        //implementation goes here
    }
}

class MsSqlDbManager : BaseDbManager {
    public override DataSet GetDataSet(...) {
        //implementation goes here
    }
}