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

interface接口

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

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

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接口” 的相关文章

类型转换Cast和Convert

类型转换Cast和Convert

把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源,a是目标。隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。比如:把中国人转换为人是隐式转换,把人转换为中国...

字符串函数详解

字符串函数详解

字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。取子字符串:string Substring(int startIndex),取从位置startIndex开始一直...

索引器

索引器

C#中提供了按照索引器进行访问的方法定义索引器的方式:string this[int index]{get { return ""; }set { }},string为索引器的类型,[]中是参数列表。进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值...

第一个Windows程序

第一个Windows程序

WinForm:Windows Form,.Net中用来开发Windows窗口程序的技术,无论是之前学的控制台程序,还是后面要学的ASP.Net都是调用.Net框架,因此所有知识点都是一样的。新建一个Windows项目:Windows→Windows窗体应用程序控件:窗口上很多元素都是相似的,因此将...

发表评论

访客

看不清,换一张

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