代码改变世界

《 .NET并发编程实战》实战习题集 - 4 - 如何重用一次性资源

2019-09-22 10:36 叶伟民 阅读(...) 评论(...) 编辑 收藏

如何重用以下一次性资源代码呢?

1 string text;
2 
3 using (var stream = new StreamReader(path))
4 
5 {
6 
7     text = stream.ReadToEnd();
8 
9 }

 

这时以传统的OOP风格来重构代码并不是一件容易的事。是可以使用模板方法模式来解决这个问题,但是该解决方案还会带来更多的复杂性,因为它需要新的基类和每个派生类的实现。更好、更优雅的解决方案是函数式编程, 即使用lambda表达式(匿名委托)。以下是实现静态辅助方法及其用法的代码:

R Using<T,R>(this T item, Func<T, R> func) where T : IDisposable { using (item)

return func(item);

string text = new StreamReader(path).Using(stream => stream.ReadToEnd());

 

以上代码实现了一种灵活且可重用的模式,以用于清理一次性资源。这里唯一的约束就是泛型类型T必须是实现IDisposable的类型。