IDisposable,约定清理类中资源的代码写在Dispose()

一、IDisposable的需求和作用

IDisposable没有任何实际作用。

public interface IDisposable
{
    void Dispose();
}

IDisposable是一个规范,是一个约定,如果一个class继承了IDisposable,实现了Dispose()方法,那么开发者就约定好将所有释放资源的代码写在这里,重点,调用的时机也是由开发者调用,IDisposable只是一个约定。

举例:

namespace _02_Scripts.Ads
{
    public class MainClass
    {
        private IDisposableTest disposableTest = null;
        
        public MainClass()
        {
            IDisposableTest disposableTest = new IDisposableTest();
            disposableTest.创建角色();
        }

        public void 清理()
        {
            disposableTest.Dispose();
        }
    }
    
    public class IDisposableTest : IDisposable
    {
        public GameObject 游戏生成的角色;

        public void 创建角色()
        {
            游戏生成的角色 = new GameObject();
        }
        
        // 实现 Dispose方法
        public void Dispose()
        {
            游戏生成的角色 = null;
        }
    }
}

二、用与不用IDisposable的区别

上面的代码如果不用IDisposable会是什么样?

public class IDisposableTest
    {
        public GameObject 游戏生成的角色;

        public void 创建角色()
        {
            游戏生成的角色 = new GameObject();
        }
        
        // 没有继承接口,那么我自己实现一个方法供外部调用
        public void MyDispose()
        {
            游戏生成的角色 = null;
        }
    }

调用方代码变成:

  public void 清理()
        {
            disposableTest.MyDispose();
        }

看上去没有任何区别。

但是当我们这样的类有成百上千之后,就无法保证,每个类中释放资源的方法名称都叫MyDispose,可能会叫ADispose,BDispose,这让项目陷入混乱。


接口约定了方法,这体现出 接口最核心的作用之一:行为约束(行为契约 / Contract)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值