Unity3D学习之(接口)

本文详细介绍了Unity3D中的接口概念,包括接口的定义、特性、实现方式(显式和隐式)、接口的继承、接口覆盖以及接口与抽象类的区别。通过示例代码解释了如何创建和使用接口,以及接口在多继承和类结构中的应用。

欢迎大家光临我的博客

1、接口

接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。

接口使用interface 关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。

 

2、接口的特性

接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员。

接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。

接口成员是自动公开的,且不能包含任何访问修饰符。

接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。

例子:

interface IProgram

    {

        void Fun();

    }

    class ProgramIProgram

    {

         //显式实现接口成员

        void IProgramFun()

        {

           Console.WriteLine("I am Fun.");

        }

        staticvoid Main(string[] args)

        {

           IProgram p =new Program();//声明一个接口实例,但不是对接口进行实例化

           p.Fun();

           Console.Read();

        }

    }


3、接口的实现分为两种①显示实现  ②隐式实现

显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用。如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。

隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问。当类或者结构要实现的是单个接口,可以使用隐式实现。

例子:

interface IProgram

    {

        void Fun();

    }

 

    interface IAProgram

    {

        void Fun();

    }

class Program : IProgram, IAProgram

    {

        void IProgram.Fun()  //显式实现接口IProgram

        {

            Console.WriteLine("I am IProgram Fun.");

        }

 

        void IAProgram.Fun()  //显式实现接口IAProgram

        {

            Console.WriteLine("I am IAProgram Fun.");

        }

 //public void Fun()   //隐式实现接口

        //{

        //    Console.WriteLine("I am Program Fun.");

        //}

        staticvoid Main(string[] args)

        {

            //IProgram p = new Program();

            //p.Fun();

            //IAProgram ap = new Program();

            //ap.Fun();

            Program pro =new Program();

            ((IProgram)pro).Fun();

            ((IAProgram)pro).Fun();

            Console.Read();

        }

    }

4、接口的继承

接口继承和类继承不同:首先,类继承不仅是说明继承,而且也是实现继承;而接口继承只是说明继承。派生类可以继承基类的方法实现,而派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现,C#中类继承只允许单继承,但是接口继承允许多继承,一个子接口可以有多个父接口。

 

5、接口的覆盖

例子:

interface IProgram

    {

        void Fun();

    }

    abstract  class AProgram : IProgram

    {

        public abstract void AFun();

        void IProgram.Fun()

        {

            AFun();

        }

    }

class Program:AProgram

    {

        public override void AFun()

        {

            Console.WriteLine("I am AProgram.");

        }

 

        staticvoid Main(string[] args)

        {

            IProgram pro =new Program();

            pro.Fun();

        }

    }

 

6、接口和抽象类的区别

接口用于规范,抽象类用于共性。

接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。

抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。

抽象类可以提供某些方法的部分实现,接口不可以。

抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的

在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写。

接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员

接口不能包含字段、构造函数、析构函数、静态成员或常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值