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()
        {
            ...
        }
    }