C#程序设计接口的定义和用法
本文讲解C#程序设计中接口的定义和用法。
-
操作流程
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#接口的定义和基本用法测试完成。
相关文章
- C#-自动获取IP
- C# 执行bat批处理文件
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
- .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- C#的抽象类和接口,区别与相似
- c# asp.net mvc API接口安全过滤,api域名过滤,api域名+端口过滤,权限,鉴权
- C#【高级篇】 C# 泛型(Generic)【需进一步补充:泛型接口、泛型事件的实例】
- C#【中级篇】接口Interface使用实例
- C#【必备技能篇】命令编译器配置环境变量教程,cmd下使用csc
- C#,红黑树(Red-Black Tree)的构造,插入、删除及修复、查找的算法与源代码
- C# 浅谈 接口(Interface)的作用
- 基于C#+SQL Server2005(WinForm)图书管理系统【100010026】
- c# IComparable与IComparer接口
- c# 接口实现
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- 用c#开发微信 (19) 公众平台接口权限列表说明 - 订阅号、服务号认证后的区别
- 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
- C#引用多个接口案例教程
- C# TextBox文本框只能输入数字、小数点(最大到2位)、退格键、负号
- c# List去重
- C#学习之获取MAC地址
- C#自定义控件在添加引用后不显示在工具箱的解决方法
- 【C#/WPF】图像数据格式转换时,透明度丢失的问题
- 接口 C#/Java 请求数据 raw 的方式传输复杂对象
- 接口 C# 请求数据 方式1