欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c#之接口

程序员文章站 2022-06-13 21:01:54
...

普通接口 

using System;

namespace 接口
{
    /// <summary>
    /// 接口的使用
    /// </summary>
    //定义接口
    /*
     *编写接口时
     * 接口的访问修饰符可以*选择,但在接口的方法前不能够加任何访问修饰符
     *它是隐式公开的
     * 接口可以声明索引器、属性、方法,但是不能够包含字段、构造函数和常量
     * 接口不能实现任何方法、属性和索引器(都在子类中实现)
     * 接口中不能有构造函数
     * 定义方法时可以不用加访问修饰符,只需要返回类型 + 函数名 +参数列表即可
     * 定义接口时要在访问修饰符后加 interface 关键字
     */
    public interface IChoose
    {
        void On();
        void Off();
    }
    public class TV:IChoose
    {
        private string _tvname = "索尼";
        public void On()
        {
            Console.WriteLine("{0}电视机打开了", this._tvname);
        }
        public void Off()
        {
            Console.WriteLine("{0}电视关了", this._tvname);
        }
    }
    class Program
    {
        /*
         *实现接口的语法和继承子类一样 “:”
         * 接口中的方法在子类实现时,不是重载不需要加override关键字
         * 在Main()中实例化类的方法不变
         */
        static void Main(string[] args)
        {
            TV mytv = new TV();
            mytv.On();
            mytv.Off();
            Console.ReadKey();
        }
    }
}

接口的继承

using System;

namespace 接口的继承
{
    //学生接口
    public interface IStudent
    {
        void Study();
    }
    //职员接口
    public interface IEmployee
    {
        void Work();
    }
     /*
     *如果要继承多个接口那么要在:后面将多个接口用,隔开
     *而且在实现里面要实现继承的d所有接口的所有方法
     */
    //在职学生接口
    public class IWorkingStudent:IStudent,IEmployee
    {
        public void Work()
        {
            Console.WriteLine("你必须完成你的工作");
        }
        public void Study()
        {
            Console.WriteLine("你必须完成你的学业");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            IWorkingStudent stu = new IWorkingStudent();
            stu.Study();
            stu.Work();
            Console.ReadKey();
        }
    }
}

类和接口同时继承

using System;

namespace 类和接口的同时继承
{
    //定义父类
    public class Person
    {
        //定义字段
        private string name;
        private string sex;
        private int age;
        //定义只读属性
        public string Name
        {
            get => name;
        }
        public string Sex
        {
            get => sex;
        }
        public int Age
        {
            get => age;
        }
        //构造函数
        public Person(string Pname, int Page, string Psex)
        {
            this.age = Page;
            this.name = Pname;
            this.sex = Psex;
        }
    }
    //定义学生接口
    public interface IStudent
    {
        void StudyBase();
        string StudentId { get; set; }
    }
    //定义职员接口
    public interface IEmployee
    {
        void Work();
    }
    //定义计算机类学生接口
    public interface IInforStudent:IStudent
    {
        void StudySpecial();

    }
    public class InfoStudent:Person,IEmployee,IInforStudent
    {
        private string studentId;
        public string StudentId
        {
            get { return studentId; }
            set { studentId = value; }
        }
        //构造函数,调用父类构造函数
        public InfoStudent(string sname,  int sage, string ssex, string sstudentId):base(sname,sage,ssex)
        {
            this.studentId = sstudentId;
        }
        //实现职员的接口
        public void Work()
        {
            Console.WriteLine("你的工作必须完成");
        }
        //实现计算机类学生的接口
        public void StudySpecial()
        {
            Console.WriteLine("你是计算机专业的学生,必须学习c#");
        }
        //实现接口IStudent的方法
        public void StudyBase()
        {
            Console.WriteLine("教育部规定高校学生必须学习语文、英语和政治思想课");
        }
    }
    
    class Test
    {
        static void Main(string[] args)
        {
            InfoStudent student = new InfoStudent("楚留香", 23, "男", "200801");
            Console.WriteLine("姓名={0},学号={1},年龄={2},性别={3}", student.Name, student.StudentId, student.Age, student.Sex);
            student.Work();
            student.StudyBase();
            student.StudySpecial();
            Console.ReadKey();
            Console.WriteLine("Hello World!");
        }
    }
}

显式接口的实现 

using System;

namespace 显式接口
{
    //定义接口
    public interface IPerson
    {
        string Name { get; set; }   //定义属性 
        void Show(string name);     //定义方法
    }
    //定义接口
    public interface IStudent
    {
        string StudentId { get; set; }  //定义属性
        void Show(string studentid);    //定义方法
    }
    public class Student:IPerson ,IStudent
    {
        //实现接口IPerson中的属性
        private string _name;
        public string Name { get => _name; set => _name = value; }    
        //实现接口IStudent中的属性
        private string _studentid;
        public string StudentId { get => _studentid; set => _studentid = value; }
        void IPerson.Show(string name)//显式接口的实现
        {
            Console.WriteLine("显示姓名{0}", name);
        }
        void IStudent.Show(string studentid)//显式接口的实现
        {
            Console.WriteLine("显示学号{0}", studentid);
        }
    }
    class Test
    {
        /*
         * 两个接口有一个同名函数
         * Student类同时实现了两个接口,所以就要实现各自的方法
         * 接口名.方法名()来区分时哪一个接口
         * 显式实现的时候方法名前面不加访问修饰符
         * 普通方法不加修饰符默认为私有的
         * 显式接口实现的方法前不加修饰符默认为私有
         * 如果加上了修饰符则会出现编译错误
         * 会出现你加的修饰符对于这个方法函数无效的错误警告
         */
        static void Main(string[] args)
        {
            Student student = new Student();
            Console.WriteLine("请输入学生姓名");
            student.Name = Console.ReadLine();
            Console.WriteLine("请输入学生学号");
            student.StudentId = Console.ReadLine();
            IPerson per = student;
            per.Show(student.Name);
            IStudent stu = student;
            stu.Show(student.StudentId);
            Console.ReadKey();
        }
    }
}