C# 为什么Dispose()方法在我的IDisposable对象上不可用?
我有一个关于此字段的类:C# 为什么Dispose()方法在我的IDisposable对象上不可用?,c#,dispose,C#,Dispose,我有一个关于此字段的类: private WcfChannelFactory<IPrestoService> _channelFactory; 但这会产生一个错误: 无法访问IDisposable.Dispose的显式实现 做了一些之后,我似乎可以这样处理: if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); } 我不明白两件事: 为什么Dispose()不可用WcfChannelF
private WcfChannelFactory<IPrestoService> _channelFactory;
但这会产生一个错误:
无法访问IDisposable.Dispose的显式实现
做了一些之后,我似乎可以这样处理:
if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
我不明白两件事:
Dispose()
不可用WcfChannelFactory
源于ChannelFactory
,它源于ChannelFactory
,后者实现了IDisposable
。但是ChannelFactory
没有Dispose()
方法。这怎么可能\u channelFactory
上调用Close()
,为什么XML文档不声明Close()
也将调用Dispose()
?也许不会?这令人困惑Dispose
方法是针对IDisposable
接口明确实现的,因此只有在引用类型为IDisposable
时才能看到该方法。方法在那里,但是当您有一个不同类型的引用时,您无法看到它。这类似于私有方法只能从类本身的代码中看到,尽管它总是在那里Close
方法不会为此类调用Dispose
。该方法不会关闭工厂,而是启动一个异步关闭过程。当Close
方法退出时,关闭过程未完成,因此此时无法处理对象Dispose
方法作为接口IDisposable
的显式成员实现。也就是说,定义如下所示:
public class WcfChannelFactory<T> : IDisposable
{
public void IDisposable.Dispose()
{
...
}
}
公共类WcfChannelFactory:IDisposable
{
public void IDisposable.Dispose()
{
...
}
}
教程:那么我该如何处置
\u channelFactory
?我应该调用Close()
?我应该调用Dispose()
?@Bob,别担心。误读了你原来的问题。看起来你在实现自己的一次性模式。@AnthonyPegram我不能。该方法返回\u channelFactory
。使用者正在使用将调用包装在一个中,因此我的类需要实现IDiposable
并对其进行处理。@BobHorn:使用关闭过程中触发的事件来捕获对象实际关闭的时间。那你就可以处理了。@Guffa谢谢。我真的需要经历这些胡闹来处理这件事?像我这样调用Dispose会不会有错?我知道显式接口实现是什么。谢谢
public class WcfChannelFactory<T> : IDisposable
{
public void IDisposable.Dispose()
{
...
}
}