zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#程序设计接口的定义和用法

c#接口 用法 定义 程序设计
2023-09-27 14:22:14 时间

本文讲解C#程序设计中接口的定义和用法。

  1. 操作流程
    1.1. 接口的概念
    1.1.1. 基本概念
    接口在任何一门面向对象的语言里,都是一个很重要的概念。都知道面向对象语言的三大特征:封装、继承、多态。其中的多态就是靠接口实现的。可以说接口是面向对象语言的精华所在。
    接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
    接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
    接口使得实现接口的类或结构在形式上保持一致。
    抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。
    接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
    抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
    1.1.2. 接口和抽象类的区别
    一、抽象类:
    抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

    二、接口:
    接口是引用类型的,类似于类,和抽象类的相似之处有三点:
    1、不能实例化;
    2、包含未实现的方法声明;
    3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

    另外,接口有如下特性:
    接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
    1.1.3. 注意事项
    在进行接口映射时,还要注意下面两点:
      1、在决定由类中的哪个成员来实现接口成员时,类中显式说明的接口成员比其它成员优先实现。
      2、使用Private、protected和static修饰符的成员不能参与实现接口映射。例如:

1.2. 接口的创建
定义接口: MyInterface.cs
接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例:
interface IMyInterface
{
void MethodToImplement();
}
以上代码定义了接口 IMyInterface。通常接口命令以 I 字母开头,这个接口只有一个方法 MethodToImplement(),没有参数和返回值,当然我们可以按照需求设置参数和返回值。

值得注意的是,该方法并没有具体的实现。
1.3. 接口的实现
接口的实现,即需要创建类继承接口,然后实现接口里的方法。
实例
using System;

interface IMyInterface
{
// 接口成员
void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}

public void MethodToImplement()
{
    Console.WriteLine("MethodToImplement() called.");
}

}
InterfaceImplementer 类实现了 IMyInterface 接口,接口的实现与类的继承语法格式类似:

class InterfaceImplementer : IMyInterface
继承接口后,我们需要实现接口的方法 MethodToImplement() , 方法名必须与接口定义的方法名一致。

1.4. 接口的继承
接口继承: InterfaceInheritance.cs
以下实例定义了两个接口 IMyInterface 和 IParentInterface。

如果一个接口继承其他接口,那么实现类或结构就需要实现所有接口的成员。

以下实例 IMyInterface 继承了 IParentInterface 接口,因此接口实现类必须实现 MethodToImplement() 和 ParentInterfaceMethod() 方法:

实例
using System;

interface IParentInterface
{
void ParentInterfaceMethod();
}

interface IMyInterface : IParentInterface
{
void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
iImp.ParentInterfaceMethod();
}

public void MethodToImplement()
{
    Console.WriteLine("MethodToImplement() called.");
}

public void ParentInterfaceMethod()
{
    Console.WriteLine("ParentInterfaceMethod() called.");
}

}
1.5. C#测试案例
1.5.1. 接口创建
创建一个C#控制台应用程序,如下所示:
在这里插入图片描述

创建一个接口,例如位Cooking,如下所示
在这里插入图片描述
在这里插入图片描述

1.5.2. 类继承接口
需要注意的是:接口中不能定于具体的成员变量,也不能定义方法的具体实现,也能添加私有或公共声明。创建两个方法,如下所示:
在这里插入图片描述

然后创建类实现接口,如下所示:
在这里插入图片描述

注意继承接口之后,接口中的方法必须要实现,如下所示:
在这里插入图片描述
在这里插入图片描述

1.5.3. 类的实例化
在写好Student类之后,其结构为:继承了Cooking接口,即变量和方法的声明在接口中,具体实现在Students类中,在main函数中进行对象实例化,如下所示:
在这里插入图片描述

运行,得到结果如下所示:

在这里插入图片描述

同理,再实现一个Tearch的类继承该接口,对Food的实现做修改,如下所示:
在这里插入图片描述

然后Eat首先输出Student类的实例化对象,然后再输出Tearch类的实例化对象,程序如下:

在这里插入图片描述

执行结果可以看到,显示实现了Student的具体方法,然后输出,再实现Tearch的方法输出,如下所示:

在这里插入图片描述

此外,类可以继承多个接口,其继承方式用逗号隔开即可,也是需要实现所继承接口的所有方法和成员变量。至此,C#接口的定义和基本用法测试完成。