c#基础学习(0806)之接口学习

首先了解一下什么是接口:

1、接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码

2、定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”)

接口存在的意义:多态。

1、多态的意义:程序可扩展性,最终让程序变得更灵活,节省成本,提高效率

2、接口解决了类的多继承问题,同时解决了类继承以后体积庞大的问题

3、从语法的角度来看,接口与抽象类类似

接口的特点总结:

1、接口是一种规范,为了实现多态

2、接口不能被实例化

3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符默认为public,不能修改

4、接口中的成员不能有任何实现(“关说不做”,只是定义了一组未实现的成员)

5、接口中只能有方法、属性、索引器、事件,不能有字段

6、接口与接口之间可以继承,并且可以多继承

7、实现接口的子类必须实现该接口的全部成员

8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须卸载IA的前面.class MyClass:A,IA{},因为类是单继承的

9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract,(抽象类也能实现接口,用abstrac标记)

10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)

namespace 接口
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("Hello World!");
            IFlyable fly = new MyClass();
            fly.SayHi();
        }
    }
    //接口不能实例化
    //接口就是让子类来实现的

    //1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口。
    //2.接口解决了不同类型之间的多态问题,比如鱼和船不是同一类型,但是都能在水里“游泳”,只是方式不一样

    //定义一个接口,建议:一定要以大写I开头
    public interface IFlyable
    {
        //接口里面能包含什么成员,接口里面只能包含【方法】
        //方法、属性、索引器、事件==》方法

        //接口中的所有成员,都不能显示的写任何访问修饰符
        //默认是public的访问修饰符
        void SayHi();
        void M1(string msg);
        //在接口中这样写表示是一个未实现的属性
        string Name
        {
            get;
            set;
        }
        //索引器
        string this[int index]
        {
            get;
            set;
        }
    }

    //接口中的成员,子类必须实现
    public class MyClass : IFlyable
    {
        public string this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

        public string Name { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

        public void M1(string msg)
        {
            throw new NotImplementedException();
        }

        public void SayHi()
        {
            throw new NotImplementedException();
        }
    }
}

直接父类继承接口:

namespace 接口练习3
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("Hello World!");
            Chinese cn = new Chinese();
            American am = new American();
            DengJi(cn);
            Console.ReadKey();
        }

        public static void DengJi(IShowInfo dengJiObj)
        {
            dengJiObj.Show();
        }
    }

    //定义一个接口
    public interface IShowInfo
    {
        void Show();
    }

    //直接父类继承接口
    public abstract class Person:IShowInfo
    {
        public string Name { get; set; }
        public string Age { get; set; }
        public string Email { get; set; }
        public abstract void Show();
    }

    class Chinese:Person
    {
        public override void Show()
        {
            Console.WriteLine("中国,8岁。。。");
        }
    }
    class American : Person
    {
        public override void Show()
        {
            Console.WriteLine("美国,18岁。。。");
        }
    }
    class German : Person
    {
        public override void Show()
        {
            Console.WriteLine("德国,28岁。。。");
        }
    }
}

 

posted @ 2018-08-06 17:56  超哥20  阅读(166)  评论(0编辑  收藏  举报