接口interface
在C#和Java中都有接口的存在,这里总结一下接口的使用
1.首先接口可以作为模板,是实现多继承的根本,在设计模式中,接口定义功能,不同的对象需要不同的功能时候可以继承不同的接口。
举例子:
internal interface Ieat//功能,吃
{
float EatTime
{
get;
set;
}
float EatNumber
{
get;
set;
}
void StopEat();
}
public class Dog : Ieat//狗继承吃的接口,拥有吃的功能
{
public float EatTime
{
get => throw new System.NotImplementedException();
set => throw new System.NotImplementedException();
}
public float EatNumber
{
get => throw new System.NotImplementedException();
set => throw new System.NotImplementedException();
}
public void StopEat()
{
throw new System.NotImplementedException();
}
}
2.接口作为参数,调用此函数时,所传递的对象只要继承了接口都可以调用此参数,将函数调用和函数实现进行分离
举例:
public class InterFaceTest : MonoBehaviour
{
private MyInter myInter = new MyInter();
private Button interFace;
private void Awake()
{
interFace = GameObject.Find("Canvas/Interface").GetComponent<Button>();
}
private void Start()
{
interFace.onClick.AddListener(InterFace);//加入监听测试
}
public void InterFace()
{
InterfaceTest(myInter);//只要是继承了TestInter的接口对象都可以传入,但是不同对象可以有不同的函数实现
}
public void InterfaceTest(TestInter testInter)
{
testInter.TestFun();
}
}
public interface TestInter//接口
{
void TestFun();
}
public class MyInter : TestInter//具体对象,实现函数
{
void TestInter.TestFun()
{
Debug.Log("我是接口测试");
}
}
挂在到unity中,点击按钮打印出”我是接口测试“,不同对象只要继承了TestInter都可以传进InterfaceTest中,而实现的细节在不同对象中可以不同。
unity中接口的身影:
unity中有许多接口方法,只要继承了接口,就能实现对应的功能,比如IPointerClickHandler点击接口,继承之后,实现函数,当点击挂在了此脚本的图片,函数就会被执行。
using UnityEngine;
using UnityEngine.EventSystems;
public class IpointerTest : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("我被点击了");
}
// Start is called before the first frame update
private void Start()
{
}
// Update is called once per frame
private void Update()
{
}
}
原理是什么呢?
当我们把EventSystem失活,就没有作用了,所以我猜原理就是EventSystem进行了检测,当点击后,EventSystem检测对象是否有满足条件的接口,如果有,就触发对应函数,没有就不触发。
关键机理在EventSystem
我们打开EventSystem的脚本,看看具体实现
很可惜,里面没有接口IPointerClickHandler和方法OnPointerClick,点击接口也没有更多的信息
关于更多的实现,则只能看源码了。