类或接口使用时机

有时候这样使用接口

public interface IAnimal
{
    void Prey();
}

public class Bird: IAnimal
{
    public void Prey() => Debug.Log("prey");
}

仔细想一想,使用抽象类或基类的方式更合适,还能定义属性和字段

public abstract class Animal
{
    public string type;
    public abstract void Prey();
}

那什么时候用接口更合适,考虑一下这种情况

public interface IFly
{
    void Fly();
}

public class Bird : Animal, IFly
{
    public override void Prey() => Debug.Log("prey");

    public void Fly() => Debug.Log("fly");
}

不是所有动物都可以 IFly,因为这不是 Animal 类型共有的能力。但鸟可以具备 IFly 能力,而飞机也可以具备 IFly 能力。可以说在这里,接口 IFly 抽象的层次比 Animal 更高。

再来看一下 Unity 中的 IPointerClickHandler 接口,各种不关联的游戏对象都能具备 OnPointerClick 能力。

想要定义一组明确具有相同能力或属性的事物时,使用抽象类或基类更适合,接口是一组能力的抽象,如果想让不同甚至毫无关联的类型具备一组能力,则使用接口更合适。

你可能感兴趣的:(Unity)