写点什么

C#中关于接口 (Interface) 的详解 (附带案例)

作者:木偶
  • 2022-10-27
    陕西
  • 本文字数:4065 字

    阅读完需:约 13 分钟

C#中关于接口(Interface)的详解(附带案例)

前言:相信在生活中,"接口"这个词对于大家来说都不陌生吧,比如说:很多不同的软件都拥有查看天气这个功能,难道说每个软件都有对应的气象局?这是因为气象局给了它们一个接口,进而实现天气功能的,显而易见接口的作用了,今天跟随博主一起来了解一下"接口"吧

一.接口含义:

接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做"部分。通俗来讲就是接口定义了一些行为,继承接口的类应该必须拥有这些行为,按照这些行为去做...

二.接口的声明:

接口必须用关键字interface来进行声明,一般格式如下所示:


访问修饰符 interface interface_name{      接口成员}
复制代码


举例:我们定义了一个接口...


 interface INmyface//接口一    {    }
复制代码


接口的默认修饰符为public哦 !注意:接口只能用 public 和 internal 访问修饰符!!!否则就会报错,例如:



三.接口成员:

1.接口成员的包含:

接口成员:接口只包含方法、属性、索引器和事件的签名

2.接口成员的定义:

接口成员定义与类成员定义相似,但是要注意:接口中成员变量的默认访问修饰符为 final ,成员方法的默认访问修饰符为 static 1. 接口成员不允许使用访问修饰符(public,private,protected 或 internal),所有的接口成员都必须是公共的;举例:



2.接口成员不能用关键字static,virtual,abstrac t或 sealed 来对其定义;举例:



3. 接口成员不能包含代码实体;4.接口成员不能定义字段成员;举例:我们定义了一个字段 A 会提示报错:


3.举例:

我们定义了一个接口,并定义了几个接口成员:


  interface INmyface//接口一    {        //4个方法        void Run();        void Say();        void Eat();        void Sleep();        //一个属性        int Age { get ; set; }    }
复制代码

四.接口的特点:

1. 接口必须用interface进行声明;


 interface INmyface//接口一    {    }
复制代码


2. 接口中只能放成员的声明;


 interface INmyface//接口一    {        void Run();        void Say();        void Eat();        void Sleep();        int Age { get ; set; }    }
复制代码


3. 继承接口必须实现接口中的所有成员,如果在接口中新增成员的声明,而在继承的类中没有进行实现时,就会报错,如:



4. 接口之间可以互相继承,但是要实现接口功能的派生类必须实现每个接口的成员:如:我们定义了一个接口INmyface,另一个接口INsecond继承了INmyface这个接口,那么当子类继承INsecond这个接口时,就要实现这两个接口中所有的成员:


 interface INmyface//接口一    {        void Run();        void Say();        void Eat();        void Sleep();        int Age { get ; set; }        void DDD();    }    interface INsecond : INmyface//继承接口,接口之间的继承    {        void Day();    }     class Son : INsecond     {        public int Age { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }        public void Day()//继承接口以后,接口二独有的方法        {            Console.WriteLine("我是第二个接口中独有的方法");        }        public void DDD()        {            Console.WriteLine("我会打游戏,---来自第一个接口");        }        public void Eat()        {            Console.WriteLine("我会吃,---来自第一个接口");        }        public void Run()        {            Console.WriteLine("我会跑---来自第一个接口");        }        public void Say()        {            Console.WriteLine("我会说话---来自第一个接口");        }        public void Sleep()        {            Console.WriteLine("我会睡觉---来自第一个接口");        }    }
复制代码


如果说,我们只实现了第一个接口的成员,而没有实现第二个接口独有的成员,那么就会报错,如下图所示:



温馨提示: 在上面举例中,我们只实现了第一个接口的成员,忽略了第二个接口的成员,那么系统就会报错,在此提醒小伙伴们千万别忘记一定要实现所有的成员哦!5.一个类可以继承多个接口,但是每个接口的成员必须进行实现:注:在继承多个接口时每个接口之间用","进行连接举例:


interface INmyface//接口一    {        void Run();        void Say();        void Eat();        void Sleep();        int Age { get ; set; }        void DDD();    }interface INseconde//接口二    {        void Day();    }    interface INThird//接口三    {        void Sun();    }    class Son : INseconde,INmyface, INThird    {}    //在此举例时就不再次写实现成员的过程了
复制代码


如果忘记了任何一个接口成员时,就会:



五.接口的实现:

前面说了那么多,那接口到底怎样在派生类中进行实现呢?,一般有两种实现形式:

1.隐式实现:

所谓的隐式实现就是对其中的方法等进行重写,举例:


public void DDD()        {            Console.WriteLine("我会打游戏,---来自第一个接口");        }
复制代码

2.显示实现:

显示实现:使用接口名点成员实现,创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的:类型 接口名称.方法{}举例,我们在原有接口中对 INseconde 中的方法和 INmyface 中的属性进行显示实现:(因为我们只更改这两个所以只写了这两个)


   class Son : INseconde,INmyface, INThird    {        int INmyface.Age        {            get;            set;        }        void INseconde.Day()        {            Console.WriteLine("我是第二个接口中独有的方法");        }     }
复制代码


main 函数中,因为用到了一个全新的概念申明类,这个知识点在下篇文章将会介绍到:


 static void Main(string[] args)        {            //Son son = new Son();            //申明类            INmyface nn = new Son();            INseconde nmyface = new Son();            nmyface.Day();            nn.Age = 1;            Console.WriteLine("这是第{0}次了解接口",nn.Age);            Console.ReadLine();        }
复制代码


运行结果:



3.隐式实现与显示实现的区别:

两者最大的区别就在于,隐式实现是接口和类都可以进行访问,显示实现只有接口可以进行访问!

六.使用接口的目的(作用):

1.一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可知,接口是专门被继承的。接口存在的意义也是被继承;2.接口的主要目的是为不相关的类提供通用的处理服务,由于 C#中只允许树形结构中的单继承,即一个类只能继承一个父类,所以接口是让一个类具有两个以上基类的唯一方式;

七.接口应用的详细举例:

 interface INmyface//接口一    {        void Run();        void Say();        void Eat();        void Sleep();        int Age { get ; set; }        void DDD();    }    interface INseconde:INFour//接口二    {        void Day();    }    interface INThird//接口三    {        void Sun();    }    interface INFour//接口用于被继承    {        void Sum();    }    class Son : INseconde,INmyface, INThird    {    //1.显示实现       // int INmyface.Age       // {       //     get;       //     set;        //}     //2.隐式实现        public int Age {            get { return 1; }            set { Age = value; }          }        //1.显示实现         //void INseconde.Day()        //{         //   Console.WriteLine("我是第二个接口中独有的方法");        //}        //2.隐式实现        public void Day()//继承接口以后,接口二独有的方法        {            Console.WriteLine("我是第二个接口中独有的方法");        }        public void DDD()        {            Console.WriteLine("我会打游戏,---来自第一个接口");        }        public void Eat()        {            Console.WriteLine("我会吃,---来自第一个接口");        }        public void Run()        {            Console.WriteLine("我会跑---来自第一个接口");        }        public void Say()        {            Console.WriteLine("我会说话---来自第一个接口");        }        public void Sleep()        {            Console.WriteLine("我会睡觉---来自第一个接口");        }        public void Sum()        {            Console.WriteLine("我是用来统计的,---来自接口的继承");        }        public void Sun()        {            Console.WriteLine("今天是晴天,---我来自第三个接口");        }         class Program    {        static void Main(string[] args)        {            Son son = new Son();            INmyface nn = new Son();            INseconde nmyface = new Son();            nmyface.Day();//显示实现            nn.Age = 1;//显示实现            son.Run();            Console.ReadLine();            //son.Say();            //Console.ReadLine();            son.Eat();            Console.ReadLine();            son.Sleep();            Console.ReadLine();            son.Day();            Console.ReadLine();            son.DDD();            Console.ReadLine();            son.Sum();            Console.ReadLine();            son.Sun();            Console.ReadLine();            Console.WriteLine("这是第{0}次了解接口",nn.Age);            //Console.WriteLine("这是第{0}次了解接口",son.Age);            Console.ReadLine();        }    }
复制代码


运行结果:





发布于: 2022-10-27阅读数: 32
用户头像

木偶

关注

凭时间赢来的东西,时间肯定会为之作证 2022-10-21 加入

CSDN前端领域优质创作者,CSDN博客专家,InfoQ写作社区专家博主,擅长PC端以及Uniapp开发

评论

发布
暂无评论
C#中关于接口(Interface)的详解(附带案例)_C#_木偶_InfoQ写作社区