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();
}
}
C#接口-抽象类-实现类 的继承结构
于 2024-05-09 13:35:37 首次发布