接口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,点击接口也没有更多的信息
在这里插入图片描述

在这里插入图片描述
关于更多的实现,则只能看源码了。
在这里插入图片描述

posted @ 2021-03-29 17:14  euph  阅读(42)  评论(0编辑  收藏  举报