Den*_*nis 5 c# vb.net .net-2.0
假设我想继承System.Data.SqlClient.SqlTransaction哪个是密封的.我希望只是放一个包装SqlTransaction,总是使用MyTransaction而不是SqlTransaction.是否有我可能会投的方式MyTransaction来SqlTransaction使用隐式/加宽操作?
您可以创建一个具有内部事务变量的类,然后公开方法和属性.有点像这样:
public class MyTransaction
{
System.Data.SqlTransaction myTx = someConnection.CreateTransaction();
public void CommitTransaction() : {
myTx.CommitTransaction()
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以让它继承自DbTransaction,然后重写抽象和虚拟程序以使用内部myTx变量,但它开始变得有点复杂,没有明显的真正原因......
如果你真的想要隐式转换(尽管我不会推荐它,因为在我看来,这是一个可怕的想法和可怕的设计),你可以这样做:
class MyTransaction
{
private readonly SqlTransaction _transaction;
public MyTransaction(SqlConnection conn)
{
_transaction = conn.BeginTransaction();
}
public SqlTransaction Transaction
{
get
{
return _transaction;
}
}
public static implicit operator SqlTransaction(MyTransaction t)
{
return t.Transaction;
}
}
Run Code Online (Sandbox Code Playgroud)