zoukankan      html  css  js  c++  java
  • 面向对象 — 接口深入研究

     

    面向对象 接口深入研究

    1、接口的定义

    什么是接口?接口用来定义一组抽象的操作的集合,通常是一些抽象方法和属性。其实,接口简单的理解就是一样约定、一种软件协议,接口约定和协议继承它的类或者结构(在Web开发方面个人认为类比结构用的多,以下只讨论类Class)必须实现接口中定义的方法,索引器,事件和属性,这就是一种协议,或者叫约定。单就这方面看,接口是没有什么用的,我们不遵守这项协议也能进行开发。但是,由于C#本身只能实现单继承,所以设计者在设计的时候为了实现多继承,就赋予接口一种特殊而有重要的功能,通过接口实现多继承。

    2、声明接口

    声明接口的如法如下:

    public interface ICar

    {

         string Model

         {

                get;

                set;

          }

          void StratEngine(Page page);

    }

    注意:在C#接口中只能包括方法、属性、索引器、事件的声明。不允许声明成员上的修饰符,即使是public也不行,因为接口成员总是公有的,也不能声明为虚拟的和静态的,如果需要修饰符,最好让实现类来声明。

    3、接口的实现

         接口中定义的方法需要在类中实现,这个过程称为接口的实现。

    1.         一个类可以同时实现多个接口(多继承)。后面用“,”分割。若实现类,则类在前,接口在后。继承接口的任何非抽象类型都必须实现接口的所有成员。例如:

    public class Car:ICar

    {

    private string _model;

    public string Model

    {

    get { return _model; }

    set { _model = value; }

    }

    public void StratEngine(Page page)

    {

    page.Response.Write("Strat Engine!");

    }

    }

    2.        接口和类都可以继承多个接口,类可以继承一个基类,接口更不不能继承类。

    3.         一个接口定义了一个只有抽象成员的引用类型。C#中一个接口实际上说做的,仅仅存在着方法的标志(就Web开发普遍应用而言),但是根本就没有执行代码,这就注定了接口不能实例化。也即不能实例化一个接口。只能实例化继承接口的类。

    4.         接口可以作为一种引用类型使用。这样方便使用接口中定义的方法,但是执行的是实本接口的类中的方法。同时我们也就可以让它指向执行实现这个接口的任何类型的实例了(通过类型转换实现),比较灵活,但是也有个缺点,就是我们如果不执行接口中的方法,比如类中定义的方法,就要先把接口的引用转换成合适的类型了。

    4、显示接口的实现

         1.如果类实现了两个接口,并且这两个接口具有相同成员(方法、属性)那么在类中实现接口的时候,两个接口都使用该成员作为他们的实现,如果功能不一样,这无疑是一种错误,为此,显示接口的实现就是为了解决这种问题的。例如:


    Public interface IControl

    {

        void Paint();

    }

    Public interface ISurface

    {

        void Paint();

    }


    public class SampleClass : IControl, ISurface

    {

        void IControl.Paint()

        {

            System.Console.WriteLine("IControl.Paint");

        }

        void ISurface.Paint()

        {

            System.Console.WriteLine("ISurface.Paint");

        }

    }

         2.显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况。

    共同的解决办法是在实现接口的时候在相同成员的前面加“接口名称+.”。用于标示实现的是那个接口中的成员。

    5、接口中的索引器

    索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数,接口索引器的访问器与类索引器的访问器具有以下方面的不同:

    1.接口访问器不使用修饰符。

    2.接口访问器没有体。


    public interface ISomeInterface

    {

        int this[int index]

        {

            get;

            set;

        }

    }

    class IndexerClass : ISomeInterface

    {

        private int[] arr = new int[100];

        public int this[int index]

        {

            get

            {

                if (index < 0 || index >= 100)

                {

                    return 0;

                }

                else

                {

                    return arr[index];

                }

            }

            set

            {

                if (!(index < 0 || index >= 100))

                {

                    arr[index] = value;

                }

            }

    }

    IndexerClass test = new IndexerClass();//此段为运用

    test[2] = 4;

            test[5] = 32;

            for (int i = 0; i <= 10; i++)

            {

                System.Console.WriteLine("Element {0} = {1}", i, test[i]);

            }


    6、接口中的事件

    同样,也可以在接口中定义事件,然后在类中实现它。关于它的运用将会在事件和委托中讲到。

  • 相关阅读:
    C#的dll被其他程序调用时,获取此dll正确的物理路径
    用鼠标右键选择DataGridView单元格或行
    当心回车符破坏你的JSON数据
    WinForm中当TextBox重新获得焦点时输入法失效问题
    django-rest-framework登陆认证
    django-celery定时任务以及异步任务and服务器部署并且运行全部过程
    linux安装mysqlclient报错
    Dajngo的CBV和FBV
    五分钟看懂Celery定时任务
    Nginx+uWsgi生产部署Django
  • 原文地址:https://www.cnblogs.com/Logen/p/1302786.html
Copyright © 2011-2022 走看看