是否可以将两个相似的类函数包装到C#中的一个类中?

时间:2009-05-28 16:38:30

标签: c#

我正在使用C#中的SqlConnection和AdomdConnection对象。

SqlConnection由以下构造:DbConnection,ICloneable。

AdomdConnection由以下组成:Component,IDbConnection,IDisposable,ICloneable。

我希望我可以使用通用接口或类类型传递,但这似乎不是一个选项,因为它们不共享一个共同的类型,我可以告诉。

他们都有类似的方法我需要调用但是因为我要编写一些关于调用它们的逻辑我想要将它们包装到自己的类中然后只调用该类并让它担心底层类型

最初,我认为我可以使用这样的东西:

public class ConnectionWrapper {
  protected object _Conn;

  public ConnectionWrapper(object Conn) {
   _Conn = Conn;
  }

  public void Open() {
   if (_Conn is SqlConnection) {
    ((SqlConnection) _Conn).Open();
   } else if (_Conn is AdomdConnection) {
    ((AdomdConnection) _Conn).Open();
   }
  }
 }

但我不禁想知道没有更好的办法。

我遇到了TypeMap类(参见问题298976),这是一种更易读的方法,但我无法弄清楚如何使用返回值,但仍然想知道是否有更好的方法做到这一点。

2 个答案:

答案 0 :(得分:11)

使用IDbConnection - 这两种类型都很常见。

SqlConnection继承自DbConnection,后者又实现IDbConnection接口。此界面也由AdomdConnection实现。

因此,您可以使用IDbConnection界面来表示两种类型

答案 1 :(得分:2)

  

SqlConnection由以下构造:DbConnection,ICloneable。

是的,但是DBConnection本身会扩展并实现Component, IDbConnection, IDisposable

因此,您可以将这两个对象都处理为IDbConnection