C# 如何从IDbConnection“继承”-只需添加一个属性(DatabaseType)

C# 如何从IDbConnection“继承”-只需添加一个属性(DatabaseType),c#,inheritance,idbconnection,C#,Inheritance,Idbconnection,如何从IDbConnection继承?我想添加一个属性数据库类型,如MS Access、SQL server、Paradox。。。。从我所知道的,IDbConnection是一个接口,因此我相信他们希望我实现整个接口继承链中的所有成员。这似乎需要做很多工作。向IDbConnection添加一个属性的最佳方法是什么 更新 我想做的就是这样。我有三种常用的方法:ExecuteReader、ExecuteOnQuery、ExecuteOnQueryGetitity。它们被大量使用,并具有参数IDbCo

如何从IDbConnection继承?我想添加一个属性数据库类型,如MS Access、SQL server、Paradox。。。。从我所知道的,IDbConnection是一个接口,因此我相信他们希望我实现整个接口继承链中的所有成员。这似乎需要做很多工作。向IDbConnection添加一个属性的最佳方法是什么

更新 我想做的就是这样。我有三种常用的方法:ExecuteReader、ExecuteOnQuery、ExecuteOnQueryGetitity。它们被大量使用,并具有参数IDbConnection、string SQLString、object[]SQLParams。我认为向这三个方法和我所有的项目方法添加DatabaseType的最好方法是“重写”IDbConnection,这样我只需要更新项目中的一行代码

我想知道DatabaseType,因为在添加参数和构建IDB命令时,我会做一些不同的事情。特别是DateTime

例如:


DbConnection实现接口IDbConnection。您可以扩展它必须实现所有接口方法

您可以使用DatabaseType属性创建新接口MyDbConnection,但现有的IDbConnection实现都不会实现您的接口

我认为您不应该关心使用MS Access、SQL server、Paradox等的IDbConnection的哪个实现。这就是为什么我们有这种抽象和类,它们是我们正在使用的数据库的完全抽象类型

顺便说一句,如果您确实需要IDbConnection实例的类型,您可以随时检查该实例的类型,以查看您正在使用的实现。如果您确实需要该属性,另一个选项是通过IDbConnection实例创建装饰器:

public class MyDbConnection : IDbConnection
{
    private IDbConnection _connection;

    public MyDbConnection(IDbConnection connection)
    {
       _connection = connection;
    }

    // here goes your property
    public string DatabaseType { get; set; }

    public void Close()
    {
        _connection.Close();
    }

    public IDbTransaction BeginTransaction(IsolationLevel il)
    {
        return _connection.BeginTransaction(il);
    }

    // implement other IDbConnection members by delegating work to _connection
}

您可以在任何地方使用此装饰器作为IDbConnection,但您的属性也将可用。

您这样做的原因是什么?根据您想要的原因,可能有不同的实现方法。接口不是继承的,而是实现的。你到底想做什么?如果您只想要一个包含IDbConnection中所有内容但包含DatabaseType的类,您应该使用Steve的答案。在更新的问题详细信息中,我解释了为什么我需要了解底层数据库类型,而不仅仅是MS Access、SQL Server、,Paradox等@user610064很有趣-您的应用程序使用1899年之前的日期?好的,我只承认时间流逝。在某些情况下,我们一直使用DateTime来存储经过的时间。。。那时候很方便。现在将MS Access转换为SQL Server…@user610064如果您仅在DateTime方面有问题,则只需提取将创建DbParameter的方法,即AddParametercommand、name、object。并从executexx方法调用该方法。
public class MyDbConnection : IDbConnection
{
    private IDbConnection _connection;

    public MyDbConnection(IDbConnection connection)
    {
       _connection = connection;
    }

    // here goes your property
    public string DatabaseType { get; set; }

    public void Close()
    {
        _connection.Close();
    }

    public IDbTransaction BeginTransaction(IsolationLevel il)
    {
        return _connection.BeginTransaction(il);
    }

    // implement other IDbConnection members by delegating work to _connection
}