C# 接口的学习

接触C#也有一段时间,对于接口的认知仅仅停留在认识阶段,好像不写出来,就不知道自己到底了解多少一样,下面我把我对于C#接口的认知与大家分享一下,望大家批评指正。

1 定义

定义是一种用来定义程序的协议,用来描述可属于任何类或结构的一组相关行为,由方法、属性、事件和索引器4种成员类型的任何组合构成,但不包含字段。

2 特点

a. 通过接口可以实现多重继承这就解决了C#类可以同时继承多个基类的问题。类、结构、接口自身都可从多个接口继承。

b. 接口可以包含方法、属性、事件和索引器作为成员,但接口成员不需要任何修饰符,即不能有publicprotectedinternalprivatenewstaticabstractoverridevirtual等修饰符原因:接口里面的内容需要继承它的类或结构去实现因此其修饰符必须是publicC#接口成员默认是public特别注意一点,当子接口继承父接口,2个接口中有相同的方法时,子接口要new关键字隐藏父接口中的方法。

c. 接口没有构造函数,不能直接实例化接口。

d. 接口类似于抽象基类:继承接口的任何非抽象类型必须实现接口中的所有成员。

e. 显示接口成员实现。使用原因:如果类实现两个接口,并且两个接口有相同签名成员,类中实现时两个接口都会用该成员作为实现,那么如果实现不同功能,就可能导致要给接口实现不正确或两个都不正确,因此需要显示地实现接口成员,即创建一个仅通过该接口调用并特定于该接口的成员。

f. 显示接口成员实现不能包好访问修饰符、abstractvirtualoverridestatic修饰符。

g. 显示接口成员属于接口成员,不属于类成员。因此,不能用类对象直接访问,只能通过接口对象来访问。

3 例子

using System;

namespace ConsoleApplication4
{

    interface People
    {
        string Name { get; set; }
        string Sex{ get; set; }
        void Study();
    }
    interface MathTeacher: People //接口MathTeacher继承接口People
    {
        void Teach();
    }
    interface EnglishTeacher: People//接口EnglishTeacher继承接口People
    {
        void Teach();
    }
    interface Student : People//接口Student继承接口People,
    {
        new void Study();//父子接口有相同方法,子接口用new隐藏父接口方法
    }
    class PerfectPeople : People, MathTeacher, EnglishTeacher, Student
        //继承自接口PeopleMathTeacher, EnglishTeacher, Student
    {
        string name = "";
        string sex = "";
        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public string Sex
        {
            get
            {
                return sex;
            }

            set
            {
                sex = value;
            }
        }

        public void Study()
        {
            Console.WriteLine(Name+ Sex +"可以自主学习");
        } //实现Study方法
        void MathTeacher.Teach()
        {
            Console.WriteLine(Name + Sex + "可以教数学");
        }//显示接口成员实现
        void EnglishTeacher.Teach()
        {
            Console.WriteLine(Name + Sex + "可以教英语");
        }//显示接口成员实现
    }
    class Program
    {
        static void Main(string[] args)
        {
            PerfectPeople perfectPeople = new PerfectPeople();//实例化接口继承类对象
            Student student = perfectPeople;//使用接口继承类实例化接口Student
            student.Name = "肖奈";
            student.Sex = "男";
            student.Study();
            MathTeacher mathTeacher = perfectPeople;//使用接口继承类实例化接口Student
            mathTeacher.Name = "叶凌天";
            mathTeacher.Sex = "男";
            mathTeacher.Teach();
            EnglishTeacher englishTeacher = perfectPeople;//使用接口继承类实例化接口Student
            englishTeacher.Name = "贝微微";
            englishTeacher.Sex = "女";
            englishTeacher.Teach();
            Console.ReadLine();
        }
    }
}

结果如下图

猜你喜欢

转载自www.cnblogs.com/nanzhixin/p/9186415.html