有没有办法在C#/ VB.NET中进行FAKE继承?

Den*_*nis 5 c# vb.net .net-2.0

假设我想继承System.Data.SqlClient.SqlTransaction哪个是密封的.我希望只是放一个包装SqlTransaction,总是使用MyTransaction而不是SqlTransaction.是否有我可能会投的方式MyTransactionSqlTransaction使用隐式/加宽操作?

Ale*_* B. 6

您可以创建一个具有内部事务变量的类,然后公开方法和属性.有点像这样:

public class MyTransaction
{
    System.Data.SqlTransaction myTx = someConnection.CreateTransaction();

    public void CommitTransaction() :  {
        myTx.CommitTransaction()
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以让它继承自DbTransaction,然后重写抽象和虚拟程序以使用内部myTx变量,但它开始变得有点复杂,没有明显的真正原因......


Mar*_*ill 3

如果你真的想要隐式转换(尽管我不会推荐它,因为在我看来,这是一个可怕的想法和可怕的设计),你可以这样做:

    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)