zoukankan      html  css  js  c++  java
  • 实现IDisposable以实现更优雅的代码

        从msdn知道,using语句是用来调用对象的Dispose方法:

    按照规则,当使用 IDisposable 对象时,应在 using 语句中声明和实例化此对象。using 语句按照正确的方式调用对象上的 Dispose 方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身处于范围之外。在 using 块中,对象是只读的并且无法进行修改或重新分配。

        刚好碰到这样一种情况:

    	ReaderWriterLock locker = new ReaderWriterLock();
    	try {
    		locker.AcquireWriterLock(0);
    		//do xxx
    	} finally {
    		locker.ReleaseWriterLock();
    	}

        通过实现IDisposable接口的Wrapper:

    	class WriterLockWrapper : IDisposable
    	{
    		private ReaderWriterLock locker;
    		
    		public WriterLockWrapper(ReaderWriterLock locker)
    		{
    			this.locker = locker;
    		}
    		
    		public void Enter()
    		{
    			this.locker.AcquireWriterLock(0);
    		}
    		
    		void IDisposable.Dispose()
    		{		
    			this.locker.ReleaseWriterLock();
    		}
    	}

        然后代码就变成:

    	ReaderWriterLock locker = new ReaderWriterLock();
    	using (WriterLockWrapper wrapper = new WriterLockWrapper(locker))
    	{
    		wrapper.Enter();
    		//do xxx
    	}

        看起来是不是优雅多了呢。当需要更多处理的时候,只需要对wrapper进行更改,而不需要对调用代码进行任何更改,灵活性也比较好。

        注:本文与IDisposable释放资源无关。

  • 相关阅读:
    Xpath定位总结
    robotframework运行时后台报错UnicodeDecodeError
    Selenium驱动Microsoft Edge浏览器(基于robotframework框架)的方法
    robotframework自动化测试安装配置
    硬币
    矩阵乘法
    动态规划和凸性优化
    动态规划背包问题--做题小总结
    CSAPP实验attacklab
    信息学奥赛出局?教育部:若提出申请,会认真研究
  • 原文地址:https://www.cnblogs.com/lwme/p/1865274.html
Copyright © 2011-2022 走看看