【转】编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable
2021-04-24 03:26
标签:man prot style public ++ == ret span source 建议46:显式释放资源需继承接口IDisposable C#中的每一个类型都代表一种资源,资源分为两类: 托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象。 非托管资源:不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COOM对象等。 如果我们的类型使用了非托管资源,或者需要显示地释放托管资源,那么就需要让类型继承接口IDisposable,这毫无例外。这相当于告诉调用者,类型资源是需要显示释放资源的,你需要调用类型的Dispose方法。 一个标准的继承了IDisposable接口的类型应该像下面这样去实现,这种实现我们称为Dispose模式: 继承IDisposable接口也为实现语法糖using带来了便利。如: 等价于: 如果存在两个类型一致的对象,using还可以这样使用: 如果两个类型不一致,则可以这样使用: 转自:《编写高质量代码改善C#程序的157个建议》陆敏技 【转】编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable 标签:man prot style public ++ == ret span source 原文地址:http://www.cnblogs.com/farmer-y/p/7988612.html public class SampleClass : IDisposable
{
//演示创建一个非托管资源
private IntPtr nativeResource = Marshal.AllocHGlobal(100);
//演示创建一个托管资源
private AnotherResource managedResource = new AnotherResource();
private bool disposed = false;
///
using (SampleClass cl = new SampleClass())
{
//省略
}
SampleClass cl;
try
{
cl == new SampleClass();
//省略
}
finally
{
cl.Dispose();
}
using (SampleClass c1 = new SampleClass(),c2=new SampleClass())
{
//省略
}
using (SampleClass c1 = new SampleClass())
using (SampleAnotherClass c2 = new SampleAnotherClass())
{
//省略
}
文章标题:【转】编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable
文章链接:http://soscw.com/essay/78759.html