【发布时间】:2020-06-04 15:16:58
【问题描述】:
如果我使用以下结构:
public class TestClass : IDisposable
{
private SqlBulkCopy _bulkCopy;
public TestClass(SqlConnection connection)
{
_bulkCopy = new SqlBulkCopy(connection);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (_bulkCopy != null)
_bulkCopy.Dispose(); // Cannot call dispose as this is a concrete implementation
}
}
}
我无法访问 _bulkCopy 对象上的 dispose 函数。
我知道我可以使用using 语句,但这是唯一的方法吗?
我不希望这样做,因为这意味着我可能不得不继续重新创建这个对象
我知道我也可以围绕这个包装一个界面,但是还有其他方法吗?
【问题讨论】:
-
将其转换为 IDisposable?
-
SqlBulkCopy显式实现了接口,因此您必须强制转换为IDisposable:((IDisposable)_bulkCopy).Dispose()。 -
@Selvin,正如李在我的评论中所阐述的那样,该方法确实“存在”,但已明确实现,因此需要强制转换。
-
@Lee 只要是
System.Data.SqlClient.SqlBulkCopy而不是一些具体实现 无论如何 -
它是“在给定实现类的引用的情况下,如何调用显式实现的接口方法。”