【Unity】【C#进阶】一.实体 Entity 实现 与 Dispose和 Finalize

本文探讨了在Unity中如何使用C#的Dispose和Finalize方法以及IDisposable接口来管理非托管资源,特别关注Entity类的实现,以及ComponentView组件的示例。
摘要由CSDN通过智能技术生成

[原创Unity基础—C#中Dispose和 Finalize
C#资源回收和IDisposable接口的使用

IDisposable 和 Finalize 皆是为了方便管理非 C# 管理下的"垃圾回收"

那Entity在C#中应该如何实现呢?

Entity.cs

public abstract class Entity : IDisposable {

	private bool disposed = false;

#if UnityEditor环境下
    public UnityEngine.GameObject GameObject { get; set; }
#endif
	
	
	//构造函数
    public Entity() {
#if UnityEditor环境下
            GameObject = new UnityEngine.GameObject(GetType().Name);
            UnityEngine.GameObject.DontDestroyOnLoad(GameObject);
            var view = GameObject.AddComponent<ComponentView>();
            view.Type = GameObject.name;
            view.Component = this;
#endif
        }	

    //GC自动调用
    ~Entity() { 
    	Dispose(false); 
    }

	//销毁
    public virtual void OnDestroy() {
    		Dispose(false); 
    }

    /// <summary>执行与释放或重置非托管资源关联的应用程序定义的任务。</summary>
    public void Dispose() {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    private void Dispose(bool disposing) {
        if (!disposed) {
            if (disposing) {
                DisposeManaged();
            }
            DisposeUnmanaged();
        }
        disposed = true;
#if UnityEditor环境下
            UnityEngine.GameObject.DestroyImmediate(GameObject);
#endif
    }
    protected abstract void DisposeManaged();//释放托管资源
    protected virtual void DisposeUnmanaged()//释放非托管资源
    {}
}

ComponentView.cs

public class ComponentView : MonoBehaviour {
    public string Type;
    public object Component { get; set; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值