接口 interface
作用:降低各模块之间的耦合,为系统提供更好的可扩展性和可维护性。
特点:
1、接口只能继承接口,不能继承类。
2、接口是规范,不包含构造器和初始化定义。
3、接口中包含的方法只能是抽象方法。
4、接口中的内部类,枚举类,接口默认的使用public static 修饰。
5、接口中的Field用 public static final修饰。
6、接口中的方法用 public abstract修饰。
7、接口支持多继承。
8、接口不能用于创建实例,但接口可以用于声明引用类型变量。
9、类实现接口时,必须将接口里的抽象类全部实现。
--------------------------------------------------------------------------------------------
实例
首先要创建个接口文件
using UnityEngine; using System.Collections; public interface myInterFace { //做一个统计动物信息的实例 void objName(); void objOld(); void objClear(); }
然后定义一个manager来管理继承接口的类
using UnityEngine; using System.Collections; using System.Collections.Generic; public class myManager : MonoBehaviour{ //定义一个列表用来存放接口文件 public static List<myInterFace> _myList = new List<myInterFace>(); //把继承接口的文件添加到列表里 public static void Add(myInterFace content) { _myList.Add(content); } //静态函数 用来控制所有接口文件同时执行函数 public static void objName() { foreach (myInterFace i in _myList) { i.objName(); } } //静态函数 用来控制所有接口文件同时执行函数 public static void objOld() { foreach (myInterFace i in _myList) { i.objOld(); } } public static void objClear() { foreach (myInterFace i in _myList) { i.objClear(); } } }
创建基类
using UnityEngine; using System.Collections; public class DogBase : MonoBehaviour, myInterFace { [SerializeField] protected string _name; [SerializeField] protected int _old; [SerializeField] private bool _isActive = true; void Start() { myManager.Add(this); } //----------------------接口事件--------------------------------- public virtual void objName() { Debug.Log("Dog:My name is " + _name + "."); } public virtual void objOld() { Debug.Log("Dog:My Old is " + _old + "."); } public virtual void objClear() { Debug.Log("-----------------------objClear"); if (_isActive) { _isActive = false; } else { _isActive = true; return; } _name = ""; _old = 0; } //----------------------一般事件--------------------------------- void OnMouseDown() { objName(); objOld(); } }
创建派生类
using UnityEngine; using System.Collections; public class DogA : DogBase { // Use this for initialization public override void objName() { base.objName(); } public override void objOld() { base.objOld(); } public override void objClear() { _name = ""; _old = 0; } }
创建主逻辑
using UnityEngine; using System.Collections; public class myMain : MonoBehaviour { // Use this for initialization void Update() { if (Input.GetKeyDown(KeyCode.S)) { //实现让所有带有接口的对象同时执行此函数 myManager.objClear(); } } }

浙公网安备 33010602011771号