interface接口

原创 小道  2018-08-31 17:46:21  阅读 319 次 评论 0 条
摘要:

继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的.1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法.2.使用接口可以使继承它的类: 命名统一/规范,易于维护.比如: 两个类 "狗"和"猫",如果它们都继承了接口"动物",其中动物里面有个方法Behavior(),那

继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的.

1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法.

2.使用接口可以使继承它的类: 命名统一/规范,易于维护.比如: 两个类 "狗"和"猫",如果它们都继承了接口"动物",其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法,并且都命名为Behavior这样就不会出现命名太杂乱的现象.如果命名不是Behavior(),接口会约束即不按接口约束命名编译不会通过.

3.提供永远的接口.当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要重新给新类设计一组方法,也节省了代码,提高了开发效率.

4.通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是public。C# 接口中的成员默认是 public 的.

接口有如下特性:

接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 


接口和抽象类:

1.都是“虚的”不能被实例化,这也是接口中为什么不能包含字段、成员变量的原因。 

2.正因为接口是虚的,所以接口内的索引,属性,时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类的事。 

3.都具有模板的性质,如果一个接口或者类从某一个接口继承,它将自动具有被集成者的特征(包括索引,属性,函数,实践等)。 

4.接口支持多重继承,而C#中,类之支持单一继承,接口实际表示的是一种承载能力。

5.一个类可以实现多个interface,但只能继承一个abstract.


通常接口命名以大写 "I" 开头。


定义一个动物接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interface接口
{
    class Program
    {
        static void Main(string[] args)
        {
            狗 g = new 狗();
            猫 m = new 猫();
            g.Name = "大黄";
            m.Name = "小黑";
            Console.WriteLine("狗狗名字:{0},叫唤:{1}",g.Name,g.叫());
            Console.Write("狗狗吃:");
            g.吃();
            Console.WriteLine("猫猫名字:{0},叫唤:{1}", m.Name, m.叫());
            Console.Write("猫猫吃:");
            m.吃();
            Console.ReadKey();
        }
    }
    public interface I动物接口  //定义一个接口
    {
        //接口方法不能用public abstract等修饰。接口内不能有字段变量,构造函数。
        //类继承接口后,里面的方法必须全部实现。
        string 叫();//接口方法,只定义 没有具体执行方法
        void 吃();//参数和返回值的方法,只定义 没有具体执行方法

        string Name //接口属性
        {
            set;
            get;
        }
    }
    class 狗 : I动物接口   //狗 类继承 I动物接口
    {
        private string name;//狗 类中的字段。
        public string 叫()//接口有返回值方法。
        {
            return "汪...汪...";
        }
        public void 吃()//接口无返回值方法
        {
            Console.WriteLine("骨头.");
        }
        public string Name //接口属性。
        {
            get{return name;}
            set{name = value;}
        }
    }
    class 猫 : I动物接口   //猫 类继承 I动物接口
    {
        private string name; //猫 类中的字段。
        public string Name //接口属性。
        {
            get{return name;}
            set{name = value;}
        }
        public string 叫() //接口有返回值方法。
        {
            return "喵...喵...";
        }
        public void 吃()//接口无返回值方法
        {
            Console.WriteLine("小鱼.");
        }
    }
}

输出结果:

image.png

本文地址:https://www.daobk.com/post/92.html
版权声明:本文为原创文章,版权归 小道 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?