DbTransaction类和C#中的接口

Can*_*cer 4 c# interface

我遇到了一个实现一个接口的例子.代码部分是

public partial interface IDataProvider
{
    DataTable GetEmployeeAbsenceDurationTypes();

    void AlterEmployeeAbsenceDurationTypes(DataTable lookUpTable);
}

public partial class DataProvider : IDataProvider
{    

    public DataTable GetEmployeeAbsenceDurationTypes()
    {
        return GetEmployeeAbsenceDurationTypes((DbTransaction)null);
    }
    public DataTable GetEmployeeAbsenceDurationTypes(DbTransaction tran)
    {
        //Db Operations
    }
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是关于这个"DbTransaction"课程.它不在我的项目中,是否是一个类的构建?

我的第二个问题是,为什么在DataProvider(实现类)中,函数调用自身的另一个重载?

Mar*_*ell 5

DbTransaction是在ADO.NET中表示数据库事务的通用基类; 每个实际的ADO.NET提供程序都是这个(通常)的子类 - 例如SqlTransaction : DbTransaction(sql-server客户端).

调用self的重载是实现可选参数的常用方法,在C#4.0中添加之前没有代码重复.在这种情况下,这基本上是一种4.0之前的实现方式:

public DataTable GetEmployeeAbsenceDurationTypes(DbTransaction tran = null) {...}
Run Code Online (Sandbox Code Playgroud)

实现(重载或可选参数)允许使用表单:

obj.GetEmployeeAbsenceDurationTypes(); // without transaction
obj.GetEmployeeAbsenceDurationTypes(tran); // with transaction
Run Code Online (Sandbox Code Playgroud)