当前位置:首页 > C#学习 > 正文内容

interface接口

小道6年前 (2018-08-31)C#学习4276

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

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://daobk.com/post/92.html

分享给朋友:

“interface接口” 的相关文章

定义类:一个类可有有多个实例。

定义类:一个类可有有多个实例。

一个类可有有多个实例。类就是把一系列相关的变量(状态)、行为定义为一个整体。字段记录的就是这个对象相关的数据。    class Program     {     ...

构造函数

构造函数

构造函数用来创建对象,并且可以在构造函数中对对象进行初始化。构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用。构造函数可以有参数,new对象的时候传递函数参数即可构造函数可以重载,也就是有多个参数不同的构造函数。如果不指定构造函数,则类有一个默认的无参构造函数。如果指...

异常与异常处理

异常与异常处理

传统的错误表示方式:错误码。举例。需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预置的错误。陈摄影师以为文件已经被删除造成的麻烦。错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。try catch。Exception ex 异常也是...

常量

常量

const常量。常量名要大写。一定不会变化的值才能声明为常量。常量一旦声明,下面就不可更改(再赋值)。    class Program     {     &nbs...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。