在调用 Dispose() 之前,为什么要将对象转换为 IDisposable?
这是ITransaction的具体实现之一:
public interface ITransaction : IDisposable
{}
.
.
.
//in some other class:
public void EndTransaction(ITransaction transaction)
{
if (transaction != null)
{
(transaction as IDisposable).Dispose();
// is the following code wrong? transaction.Dispose()
transaction = null;
}
}
这是ITransaction的具体实现之一:
public class NHibernateTransaction : ITransaction
{
public NHibernateTransaction(NHibernate.ITransaction transaction)
{
this.Transaction = transaction;
}
protected NHibernate.ITransaction Transaction { get; private set; }
public void Dispose()
{
if ( this.Transaction != null )
{
(this.Transaction as IDisposable).Dispose(); // this is NHibernate ITransaction object
this.Transaction = null;
}
}
我在一个开源实现的仓储模式中多次看到了这段代码片段,但似乎无法理解强制类型转换的原因。直接在if语句内部调用transaction.Dispose()应该完全没有问题。我错过了什么吗?
原始代码可以在此处找到:NHibernateTransaction.cs