说明

接口可以包含方法、属性、索引器、和事件作为成员,但是并不能设置这些成员的具体值。也就是说,只能定义,不能那个给他里面定义的东西赋值。

接口具有以下特性。

  • 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
  • 不能直接实例化接口。
  • 接口可以包含事件、索引器、方法和属性。
  • 接口不包含方法的实现。
  • 类和结构可从多个接口继承。
  • 接口自身可从多个接口继承。

c#中声明接口时,使用interface关键字

修饰符 interface 接口名称:继承的接口列表
{接口内容;
}

说明

1.声明接口时,除interface关键字和接口名称外,其他都是可选项。

2.可以使用new、public、protected、internal和private等修饰符声明接口,但接口成员必须是公共的。

常见的访问修饰符有:

(1)public 公有访问。不受任何限制。

(2)private 私有访问。只限于本类成员访问,子类。

(3)protected 保护访问。只限于本类和子类访问。

(4)internal 内部访问。只限于本项目内访问,其他不能访问。

(5)protected internal 内部保护访问。只限于本项目或是子类访问,其他不能访问

接口的实现与继承

接口定义:

interface Imyinterface//再三强调,接口中只能声明,不能给定义赋值{string ID{get;set;}string Name{get;set;}void ShowInfo();//不能给函数写任何内容}class program:Imyinterface//program类继承接口,需要对接口里的内容全部进行定义,否则编译就会不通过{private string id = "";private string name = "";public string ID{get { return id; }set { id = value; }}public string Name{get { return name; }set { name = value; }}public void ShowInfo(){Console.WriteLine("编号\t 姓名");Console.WriteLine(ID+"\t"+Name);}}

主函数:

static void Main(string[] args){program p = new program();//这里是实例化program类对象p.ID = "TM";p.Name = "C#3.5从入门到应用开发";p.ShowInfo();Imyinterface mf = p;//使用派生类对象实例化接口Imyinterfacemf.ID = "MCK";//为派生类中的ID属性赋值mf.Name = "2018";//为派生类中的Name属性赋值mf.ShowInfo();//调用派生类中的函数}

运行结果:

编号     姓名
TM       C#3.5从入门到应用开发
MCK      2018

上面的实例中只继承了一个接口,接口还可以多重继承,使用多重继承时,要继承的接口间用逗号(,)分隔。

  • 例:我声明了3个接口IPeople、ITeacher、IStudent,其中ITeacher、IStudent继承自IPeople。然后使用Program类继承这三个接口。

接口声明:

interface IPeople{string Name{ get; set; }string Sex{ get; set; }}
interface IStudent:IPeople{void study();}
interface ITeacher:IPeople{void teach();}
class program:IPeople,IStudent,ITeacher{private string name = "";private string sex = "";public string Name{get { return name; }set { name = value; }}public string Sex{get { return sex; }set { sex = value; }}public void teach(){Console.WriteLine(Name+" "+Sex+" 老师");}public void study(){Console.WriteLine(Name+" "+Sex+" 学生");}}

主函数:

 static void Main(string[] args){program pg = new program();ITeacher it = pg;it.Name = "mck";it.Sex = "man";it.teach();IStudent ist= pg;ist.Name = "mck";ist.Sex = "man";ist.study();}

运行结果:

mck man 老师
mck man 学生

显式接口成员实现

显式接口成员实现是使用接口名称和一个句点命名该类成员实现的。

interface IPeople{string Name{ get; set; }string Sex{ get; set; }}interface IStudent:IPeople{void study();}interface ITeacher:IPeople{void teach();void study();}class program:IPeople,IStudent,ITeacher{private string name = "";private string sex = "";public string Name{get { return name; }set { name = value; }}public string Sex{get { return sex; }set { sex = value; }}public void teach(){Console.WriteLine(Name+" "+Sex+" 老师");}void  IStudent.study()//显式接口方法,只能是ISudentd的对象使用{Console.WriteLine(Name+" "+Sex+" 学生学习");}void ITeacher.study()//显式接口方法,只能是ITeacher的对象使用{Console.WriteLine(Name + " " + Sex + " 老师学习");}}
static void Main(string[] args){program pg = new program();//实例化接口继承类的对象ITeacher it = pg;//使用接口继承类的对象实例化接口it.Name = "mck";it.Sex = "man";it.teach();it.study();IStudent ist= pg;//使用接口继承类的对象实例化接口ist.Name = "mck";ist.Sex = "man";ist.study();}

注意

1.显式接口成员实现中不能包含访问修饰符、abstract、virtual、override或static修饰符。

2.显式接口成员属于接口的成员,而不是类的成员,因此,不能使用类的对象直接访问,只能通过接口对象访问。

抽象类和抽象方法

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类。在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。

抽象类的概述及声明

抽象类和非抽象类的区别:

  • 抽象类不能直接实例化。
  • 抽象类中可以包含抽象成员,但非抽象类中不可以。
  • 抽象类不能被密封。
访问修饰符 abstract class myclass
{public int i;public void method(){}
}

抽象方法概述及声明

抽象方法就是在声明方法时,加上abstract关键字,声明抽象方法时需要注意:

  • 抽象方法必须声明在抽象类中。
  • 声明抽象方法时,不能使用virtual、static和private修饰符。

抽象方法不提供任何实际实现,因此抽象方法的方法体只包含一个分号;

当从抽象类派生一个非抽象类时,需要在非抽象类中重写抽象的方法,以提供具体实现,重写抽象方法时使用override关键字。

例:声明一个抽象类,里面有一个抽象方法

public abstract class myclass
{public abstract void method();//抽象方法
}

c#接口,抽象类学习相关推荐

  1. Java面向对象:接口的学习

    本文介绍了Java中接口的基本语法, 什么是接口, java中的接口 语法规则, 接口的使用,接口的特性,如何实现多个接口,接口间的继承,以及抽象类和接口的区别 Java接口的学习 一.接口的概念 二 ...

  2. C++中的接口(抽象类)

    1.Cpp中的接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现.接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念.如果类中至少有一 ...

  3. delphi接口基本学习摘录

    delphi接口基本学习摘录 声明接口         IMyInterface = interface(IInterface)           ['{63E072DF-B81E-4734-B3C ...

  4. C++ 接口(抽象类)

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...

  5. TS基础1(类型定义、接口)-学习笔记

    文章目录 TS基础1(类型定义.接口)-学习笔记 什么是TS TS基础1(类型定义.接口)-学习笔记 什么是TS //ts用法var n:number = 10;let str:string = '1 ...

  6. jdk8 接口抽象类区别_JDK 8时代的抽象类与接口

    jdk8 接口抽象类区别 在新的Java 8日期和时间API:Stephen Colebourne的访谈中 , Stephen Colebourne告诉Hartmut Schlosser :" ...

  7. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  8. AXI接口协议学习总结

    AXI接口协议学习总结 下面将AXI接口协议学到的相关内容整理如下 一.AXI接口协议定义 AXI是Advanced eXtensible Interface的缩写,译为高级可扩展接口协议,是ARM公 ...

  9. 【微机原理与接口技术学习实践】汇编语言程序设计初步——debug编写调试指令序列

    halo~我是bay_Tong桐小白 本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言.指点 [微机原理与接口技术学习 ...

  10. python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

最新文章

  1. 数字图像处理——第六章 彩色图像处理
  2. [转] 使用模板自定义 WPF 控件
  3. 吞吐量达到瓶颈后下降_如何找到 Kafka 集群的吞吐量极限?
  4. 在html用div怎样写页脚,使用div+CSS将页脚始终控制在页面最下方的方法
  5. 给定一个年份,判断这一年是不是闰年。
  6. c#爬虫-1688官网自动登录
  7. 20145309 《网络对抗技术》信息搜集与漏洞扫描
  8. php fpm高并发,php-fpm 高并发、502解决方案
  9. LitePal 数据库使用方法(最新2.0LitePal数据库适用)
  10. Veritas Backup Exec备份软件服务器、客户端安装以及如何设置备份任务
  11. 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
  12. 围棋学习路线及书籍介绍
  13. 《尚书》全文、注释及译文(1)
  14. 基于单片机的空气质量(PM2.5)监测系统设计(#0423)
  15. Python3 利用阿里接口,根据银行卡号获取银行名称和logo
  16. 新计算机的word无法输入文字,【WORD为什么无法输入文字?】word如何转换excel
  17. php容器概念,PHP容器——Pimple运行流程浅析
  18. Modulo Summation——UPC
  19. 涅普之rce(远程代码控制)
  20. 小提琴统计图_箱形图和小提琴图

热门文章

  1. python linspace函数_numpy中linspace用法
  2. win7 64位频繁跳出“资源管理器已停止工作”的提示
  3. 中文在线股东朱明累计质押全部股权 去年亏损近15亿元
  4. non-saturating neurons非饱和神经元、saturating neurons饱和神经元 的含义和区别
  5. CN2线路与其他线路有什么区别?
  6. 利用D触发器的输入输出延迟实现二倍频电路
  7. ssm 上传图片到mysql_ssm图片上传到数据库
  8. ctpn算法是机器学习吗?ctpn是什么?
  9. SQL SERVER导出模型图
  10. mx550相当于什么水平 mx550独显相当于GTX什么级别