首页 新闻 会员 周边

继承自IDisposable的问题求诸大神!

0
悬赏园豆:5 [已关闭问题] 关闭于 2016-10-31 09:22
public abstract class HttpMessageHandler : IDisposable
{
    protected internal abstract Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
    
    protected virtual void Dispose(bool disposing)

    public void Dispose()
}

1.Dispose这个虚函数 什么作用,怎么用?

2.下面的Dispose是干吗用的?

王庆东mas的主页 王庆东mas | 初学一级 | 园豆:4
提问于:2016-10-22 21:34
< >
分享
所有回答(4)
0

买本语法书吧...比如c#高级程序设计.书里都有讲.

对象在被释放时会调用Dispose

吴瑞祥 | 园豆:29449 (高人七级) | 2016-10-22 23:55
-1

继承IDisposable的类,可以显式的调用Dispose方法来释放对象,意思就是这个对象没啥用了,GC啥时候有空,来把它占用的内存资源收走吧~

新的开始 | 园豆:679 (小虾三级) | 2016-10-23 09:21

public void Dispose() 这句代码语法没见过呀,没有封号却不报错。

支持(0) 反对(0) 王庆东mas | 园豆:4 (初学一级) | 2016-10-24 13:56
-1

Dispose字面意思已经很清楚了,理解他相对简单(但Framework中,堆对象是托管式的,那又为什么需要Dispose呢,这个你需要去思考);理解IDisposable就没那么多原理了,首先它作为接口,那么接口在面向对象模式中的用途?(这个需要点经验,你就慢慢体会了);为什么这个接口很特殊——那么微软对这个接口势必有特殊处理(该项很直接查到)。只是玩一个工具而已,多用,多思考,用到什么不认识的动手查询一下就行了。

花飘水流兮 | 园豆:13560 (专家六级) | 2016-10-24 11:36

能举个栗子吗》

支持(0) 反对(0) 王庆东mas | 园豆:4 (初学一级) | 2016-10-24 15:40
1

CA1063:正确实现 IDisposable

 

public class Resource : IDisposable 
{
    private IntPtr nativeResource = Marshal.AllocHGlobal(100);
    private AnotherResource managedResource = new AnotherResource();

// Dispose() calls Dispose(true)
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    // NOTE: Leave out the finalizer altogether if this class doesn't 
    // own unmanaged resources itself, but leave the other methods
    // exactly as they are. 
    ~Resource() 
    {
        // Finalizer calls Dispose(false)
        Dispose(false);
    }
    // The bulk of the clean-up code is implemented in Dispose(bool)
    protected virtual void Dispose(bool disposing)
    {
        if (disposing) 
        {
            // free managed resources
            if (managedResource != null)
            {
                managedResource.Dispose();
                managedResource = null;
            }
        }
        // free native resources if there are any.
        if (nativeResource != IntPtr.Zero) 
        {
            Marshal.FreeHGlobal(nativeResource);
            nativeResource = IntPtr.Zero;
        }
    }
}

 

jasonjn | 园豆:202 (菜鸟二级) | 2016-10-24 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册