【c# 学习笔记】接口

一、什么是接口 

  接口 可以理解为对一组方法声明进行的同一命名,但这些方法没有提供任何实现。也就是说,把一组方法声明在一个接口中,然后继承于该接口的类都

需要实现这些方法。

  例如,很多类型(比如int 类型、string类型和字符类型等)都需要比较大小,此时可以定义一个比较接口,在该接口中定义比较方法,然后让这些类型去

继承该接口,并实现自己的比较方法。

  通过接口,你可以对方法进行统一的管理,避免了在每种类型中重复定义这些方法。

二、接口的定义

  2.1、接口的定义与类的定义非常类似,只是使用的关键字不一样罢了,类的定义使用class关键字,而接口使用interface关键字进行定义。

在visual Studio中添加接口的步骤如下:

    2.1.1、创建一个全新的控制台应用程序,把它命名为CustomInterface;

    2.1.2、右击项目,在弹出的菜单中选择“添加” →“新建项” 菜单项,选择接口,输入名称,点击确定。如下:

    

    interface ICustomCompare
    {
      //定义比较方法,继承该接口的类都要实现该方法
      int CompareTo(object other);
}

  在接口中定义方法不能添加任何访问修饰符,因为接口中的方法默认为Public,如果显式地指定了修饰符,则会出现编译时错误。

  在接口中除了可以定义方法之外,还可以包含属性、事件、索引器,或者这4类成员(包括方法)类型的任意组合;但接口类型不能包含字段、运算符重载、

实例构造函数和析构函数。

  接口中的所有成员都默认是公共的,因此不能再使用public、private和protected等访问修饰符进行修饰,也不能使用static修饰符。如果在接口中定义了不该包含的成员,就会导致编译错误。

三、继承接口

  定义完接口后,若有类想继承该接口,则它必须实现接口中定义的所有方法。类继承接口与继承类是一样的,只需要使用英文的冒号“:”,后接接

口名就可以了。如下:

  

 1     //不使用封装特性来定义一个Person类
 2     public class Person:ICustomCompare
 3     {
 4         int age;
 5         public int Age
 6         {
 7             get { return age; }
 8             set { age = value; }
 9 
10         }
11         public int CompareTo(object value)
12         {
13             if(value  == null)
14             {
15                 return 1;
16             }
17 
18             //将object类型强制转换为Person类型
19             Person otherp = (Person)value;
20             //把当前对象的Age属性与需要比较的对象的Age属性进行对比
21 
22             if(this.Age < otherp.Age)
23             {
24                 return -1;
25             }
26 
27             if (this.Age < otherp.Age)
28             {
29                 return 1;
30             }
31 
32             return 0;
33         }
34 
35  
36     }

  以上代码中,定义了一个Person类继承于ICustomCompare接口,并且该类实现了接口中定义的CompareTo方法。

  CompareTo方法会首先判断参数对象是否为null,如果比较的对象为空,就直接返回1,代表当前对象比传入对象大。如果比较的对象不为null,则首先把它强制转换为Person类型(传进来的参数是object类型,不同类型的对象间不存在可比性)。再比较他们的Age属性。如果当前对象(即Person对象)的Age属性比传入对象的Age属性值大,则返回1,说明当前对象比传入对象大;如果返回-1,则表示比传入的对象小;相等,则返回0;

四、调用接口中的方法

  代码如下:

        static void Main(string[] args)
        {

            Person p1 = new Person();
            p1.Age = 19;

            Person p2 = new Person();
            p2.Age = 19;

            if (p1.CompareTo(p2) > 0)
            {
                Console.WriteLine("P1比P2大");
            }
            else if (p1.CompareTo(p2)<0)
            {
                Console.WriteLine("p1比p2小");
            }
            else
            {
                Console.WriteLine("p1和p2一样大");
            }


            Console.Read();
        }

猜你喜欢

转载自www.cnblogs.com/xiaoyehack/p/9214579.html