C#基础之接口(6)

接口的定义:interface。

什么是接口? 接口,我的理解是接口是一种规范。就好比,一个生产数据线的厂商有很多,形状,外观都不一样,现在制定了一个规范那就是所有的数据线生产商都必须把产品外观形状都设计成长方形。这就给定了一个规范。实际上接口也是在处理程序的性能上也是有所考虑。再举一个例子,比如一个员工类,里面定义了字段,方法以及属性。每个人都有自己的独有的部门吧。这时候如果突然加入了一个新员工,那是不是要再重新建一个类设计对应的字段属性部门之类的。这就使得程序很繁琐,在项目开发过程中很容易出错,如果我们把一个部门提出来,定义一个接口,让所有的员工实现这个接口,那是不是这个接口就始终是一个并且每个人都只调用一次。。。实际上接口有分隐式接口调用和显示接口调用。在开发过程中(小型项目)一般应该是隐式接口调用的方法用的比较多,我也是前几天才发现还有显示接口调用的方法,真是才疏学浅,只是学的皮毛,今天就来记录一波。

隐式接口调用:

定义接口(1)

  //定义接口
    interface IAnimal
    {
        //定义接口方法,不能有方法体,需要调用此接口去实现其接口
        void Name();
    }

类继承接口(2)

    class AnimalCat : IAnimal
    {
        //实现接口的方法
        public void Name()
        {
            Console.WriteLine("我的名字是小猫");
        }
    }
    //继承接口
    class AnimalDog : IAnimal
    {
        //实现接口的方法
        public void Name()
        {
            Console.WriteLine("我的名字是小狗");
        }
    }

隐式调用接口(3)

class Program
    {
        static void Main(string[] args)
        {
            /*
             * 接口实现的方法有两种:1.隐式、2.显示
             */
            //通过类调用,隐式接口实现(小型项目)
            Console.WriteLine("---------类调用----------");
            AnimalCat cat = new AnimalCat();
            AnimalDog dog = new AnimalDog();
            cat.Name();
            dog.Name();

            Console.WriteLine("--------接口调用---------");
            //通过接口调用
            IAnimal animalcat = new AnimalCat();
            IAnimal animaldog = new AnimalDog();
            animalcat.Name();
            animaldog.Name();
        }
    }

注:隐式接口实现既可以通过类去调用也可以通过接口去调用。

显示接口:

    class AnimalPer : IAnimal
    {
        //接口自己调用,给定标识
        void IAnimal.Name() 
        {
            Console.WriteLine("显示接口调用的实现");
        }
    }

调用:实际上在调用的过程中,显示接口的调用只能通过接口去调用,如果通过类去调用直接就报错找不到类的方法。。。

    class Program
    {
        static void Main(string[] args)
        {
            //显示接口实现(只能通过接口调用)
            Console.WriteLine("------显示接口实现-------");
            IAnimal animalper = new AnimalPer();
            animalper.Name();
        }
    }

如果你想要通过类去调用也不是不可以只不过需要进行一个强制转换的操作:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("------类调用显示接口实现(强制转换)---");
            AnimalPer animalpers = new AnimalPer();
            // 强制转换
            (animalpers as IAnimal).Name();
        }
    }

执行效果如下图: