我遇到了一个实现一个接口的例子。代码部分是
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
}
}
我的第一个问题是关于这个“DbTransaction”课程。它不在我的项目中,它是一个类的构建吗?
我的第二个问题是,为什么在DataProvider(实现类)中,该函数正在调用自身的另一个重载?
答案 0 :(得分:5)
DbTransaction
是用于在ADO.NET中表示数据库事务的公共基类;每个实际的ADO.NET提供程序都是这个(通常)的子类 - 例如SqlTransaction : DbTransaction
(sql-server客户端)。
调用self的重载是在C#4.0中添加可选参数无代码重复之前的常用方法。在这种情况下,这基本上是4.0之前的实现方式:
public DataTable GetEmployeeAbsenceDurationTypes(DbTransaction tran = null) {...}
实现(重载或可选参数)允许使用表单:
obj.GetEmployeeAbsenceDurationTypes(); // without transaction
obj.GetEmployeeAbsenceDurationTypes(tran); // with transaction
答案 1 :(得分:4)
第一个问题是无法在没有看到整个代码的情况下回答 ,但它可能指的是System.Data.Common.DbTransaction
。
至于实现 - 可能是重用代码的一种方式,就是这样。如果 with 参数的方法的实现可以自然地处理参数值null
作为“在新事务中执行”(或者无参数方法应该是什么行为)为什么不会你想要一个重载来调用另一个?