C#接口-抽象类-实现类 的继承结构

using UnityEngine;
//常见的 接口-抽象类-实现类 的继承结构
public class InterfaceStructExample : MonoBehaviour
{
    public interface ICustomScript/// 接口
    {
        void Start();
        void Update();
        void Destroy();
    }
    public abstract class CustomScript : ICustomScript   /// 抽象类
    {
        protected bool mStarted { get; private set; }
        protected bool mDestroyed { get; private set; }
        /// 希望子类实现 OnStart 方法
        protected abstract void OnStart();
        protected abstract void OnUpdate();
        protected abstract void OnDestroy();

        /* public void Start()//如果使用隐式接口实现
         {
             OnStart();
             mStarted = true;
         }*/
        // 不希望子类访问 Start 方法,因为有可能破坏状态
        void ICustomScript.Start()//显式接口实现
        {
            OnStart();
            mStarted = true;
        }
        void ICustomScript.Update()//显式接口实现
        {
            OnUpdate();
        }
        void ICustomScript.Destroy()//显式接口实现
        {
            OnDestroy();
            mDestroyed = true;
        }
    }
    public class MyScript : CustomScript/// 由用户扩展的类
    {
        protected override void OnStart()
        {
            //Start();隐式调用
            //隐式实现OnStart()调用接口的 Start 方法,Start 方法会调用OnStart(),会陷入循环
            //(this as ICustomScript).Start();显式调用
            //虽然也可以调用但是明显更难去调用
            Debug.Log("MyScript:OnStart");
        }
        protected override void OnUpdate()
        {
            Debug.Log("MyScript:OnUpdate");
        }
        protected override void OnDestroy()
        {
            Debug.Log("MyScript:OnDestroy");
        }
    }
    /// 测试脚本
    private void Start()
    {
        ICustomScript script = new MyScript();
        script.Start();
        script.Update();
        script.Destroy();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值