AI智能
改变未来

C#学习笔记–接口(读自C#从入门到精通 第2版)


统一的标准-接口

接口是面向对象编程的一个重要技术,在C#中负责实现多重继承。一个接口定义一个协定,实现接口的类或结构必须遵守其协定。

接口的定义
  • 接口用来描述一种程序的规定,可定义属于任何类或结构的一组相关行为。
  • 接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。
  • 接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。
  • 接口成员一定是公共的。
  • 接口不能包含其所定义的成员的任何实现语句,接口只指定实现该接口的类或必须提供的成员。
// 语法:<访问修饰符> interface 接口名{//接口主体}
接口的实现

定义了接口后,就要在类或结构中实现。C#中通常把派生类和基类的关系称为继承,类和接口的关系称为实现。

实现接口的语法和继承类一样,都有“:”,接口中的方法在类中实现时不是重载,不需要使用override关键字。

示例: 声明接口IPoint描述一个点的坐标并实现该接口。

// IPoint.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace interfaceTest{interface IPoint{// 定义属性成员x,它含有读/写抽象访问int x { get; set; }// 定义属性成员y,它含有读/写抽象访问int y { get; set; }}// 从接口IPoint派生一个新类,这个类用来实现Point接口成员class Point: IPoint{// 定义两个类内部访问的私有成员变量private int px;private int py;// 构造函数实现类的私有化,为私有变量赋值public Point(int x, int y){px = x;py = y;}// 接口属性实现public int x{get { return px; } // 实现读访写set { px = value; } // 实现写访问}public int y{get { return py; } // 实现读访写set { py = value; } // 实现写访问}}}

IPoint接口内部声明了两个属性成员x和y,x和y一起组成了一个点的坐标。属性成员x和y包含抽象的读/写访问,分别表示属性成员可以对坐标进行读和写。
定义类Point来实现IPoint接口,它包含了对接口成员的具体实现。

// Program.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace interfaceTest{class Program{static void Main(string[] args){Point p = new Point(5, 30); // 应用接口的派生类Point实例化一个新的对象并进行初始化赋值Console.WriteLine(\"新创建的Point点的坐标是:\");Console.WriteLine(\"x = {0}, y = {1}\", p.x, p.y); // x = 5, y = 30}}}
  • 对接口名称建议以“I”开头,如Ipoint;
  • 对接口的访问修饰符可以选择使用,但是接口的方法前面不能添加任何访问修饰符,它是隐式公开的;
  • 接口不能包含构造函数,接口不能实现任何方法、属性和索引器。

扩展:定义一个IPerson接口,接口包含DoWork和DoExercise两个抽象方法,并用Person类实现接口。

// IPerson.csinterface IPerson // 声明接口IPerson{void DoWork(); // 声明DoWork方法void DoExercise(); // 声明DoExercise方法}// 定义Person类实现IPerson接口public class Person: IPerson{// 定义基类的共有属性private string _name; // 声明姓名字段public string Name // 声明姓名属性{get { return this._name; }set {this._name = value; }}public Person(){} // 声明无参构造函数public Person(string name) // 声明有参构造函数{this._name = name;}public void DoWork() // 定义工作方法{Console.WriteLine(\"I\'m working!\");}public void DoExercise() // 定义锻炼方法{Console.WriteLine(\"I\'m doing exercise!\");}public void Display() // 基类的共有方法{Console.WriteLine(\"我是{0}\", this._name);}}
// Program.csPerson objPerson = new Person(\"小明\");objPerson.Display(); //  我是小明objPerson.DoWork(); // I\'m working!objPerson.DoExercise(); // I\'m doing exercise!
接口的实现
  • C#中的派生类只能有一个基类,不支持类的多重继承,但可以继承多个接口,通过接口实现多继承。
  • 如在现实中儿子不但可以继承父亲的财产,如伯父无子女,也可以继承伯父的财产,在C#中这属于多重继承,要用接口来实现,其实接口就是为了实现多重继承而产生的。
  • 在C#中接口可以多继承,接口之间可以互相继承,普通类和抽象类可以继承自接口。
  • 一个类可以同时继承一个类和多个接口,但是接口不能继承类。
  • 点赞
  • 收藏
  • 分享
  • 文章举报

Yeats.NeverGiveUp发布了12 篇原创文章 · 获赞 0 · 访问量 163私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#学习笔记–接口(读自C#从入门到精通 第2版)