首先了解一下什么是接口:

1、接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码

2、定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”)

接口存在的意义:多态。

1、多态的意义:程序可扩展性,最终让程序变得更灵活,节省成本,提高效率

2、接口解决了类的多继承问题,同时解决了类继承以后体积庞大的问题

3、从语法的角度来看,接口与抽象类类似

接口的特点总结:

1、接口是一种规范,为了实现多态

2、接口不能被实例化

3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符默认为public,不能修改

4、接口中的成员不能有任何实现(“关说不做”,只是定义了一组未实现的成员)

5、接口中只能有方法、属性、索引器、事件,不能有字段

6、接口与接口之间可以继承,并且可以多继承

7、实现接口的子类必须实现该接口的全部成员

8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须卸载IA的前面.class MyClass:A,IA{},因为类是单继承的

9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract,(抽象类也能实现接口,用abstrac标记)

10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)

  1. namespace 接口
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //Console.WriteLine("Hello World!");
  8. IFlyable fly = new MyClass();
  9. fly.SayHi();
  10. }
  11. }
  12. //接口不能实例化
  13. //接口就是让子类来实现的
  14.  
  15. //1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口。
  16. //2.接口解决了不同类型之间的多态问题,比如鱼和船不是同一类型,但是都能在水里“游泳”,只是方式不一样
  17.  
  18. //定义一个接口,建议:一定要以大写I开头
  19. public interface IFlyable
  20. {
  21. //接口里面能包含什么成员,接口里面只能包含【方法】
  22. //方法、属性、索引器、事件==》方法
  23.  
  24. //接口中的所有成员,都不能显示的写任何访问修饰符
  25. //默认是public的访问修饰符
  26. void SayHi();
  27. void M1(string msg);
  28. //在接口中这样写表示是一个未实现的属性
  29. string Name
  30. {
  31. get;
  32. set;
  33. }
  34. //索引器
  35. string this[int index]
  36. {
  37. get;
  38. set;
  39. }
  40. }
  41.  
  42. //接口中的成员,子类必须实现
  43. public class MyClass : IFlyable
  44. {
  45. public string this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
  46.  
  47. public string Name { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
  48.  
  49. public void M1(string msg)
  50. {
  51. throw new NotImplementedException();
  52. }
  53.  
  54. public void SayHi()
  55. {
  56. throw new NotImplementedException();
  57. }
  58. }
  59. }

直接父类继承接口:

  1. namespace 接口练习3
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //Console.WriteLine("Hello World!");
  8. Chinese cn = new Chinese();
  9. American am = new American();
  10. DengJi(cn);
  11. Console.ReadKey();
  12. }
  13.  
  14. public static void DengJi(IShowInfo dengJiObj)
  15. {
  16. dengJiObj.Show();
  17. }
  18. }
  19.  
  20. //定义一个接口
  21. public interface IShowInfo
  22. {
  23. void Show();
  24. }
  25.  
  26. //直接父类继承接口
  27. public abstract class Person:IShowInfo
  28. {
  29. public string Name { get; set; }
  30. public string Age { get; set; }
  31. public string Email { get; set; }
  32. public abstract void Show();
  33. }
  34.  
  35. class Chinese:Person
  36. {
  37. public override void Show()
  38. {
  39. Console.WriteLine("中国,8岁。。。");
  40. }
  41. }
  42. class American : Person
  43. {
  44. public override void Show()
  45. {
  46. Console.WriteLine("美国,18岁。。。");
  47. }
  48. }
  49. class German : Person
  50. {
  51. public override void Show()
  52. {
  53. Console.WriteLine("德国,28岁。。。");
  54. }
  55. }
  56. }

c#基础学习(0806)之接口学习的更多相关文章

  1. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  2. No2_1.接口继承多态_Java学习笔记_接口

    接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...

  3. C# 常用接口学习 ICollection<T>

    C# 常用接口学习 ICollection<T> 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 2015 参 ...

  4. C# 常用接口学习 IComparable 和 IComparer

    C# 常用接口学习 IComparable 和 IComparer 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 201 ...

  5. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

  6. 1、JavaScript 基础一 (从零学习JavaScript)

    1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...

  7. PowerDesigner最基础的使用方法入门学习(转)

    PowerDesigner最基础的使用方法入门学习   1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16. ...

  8. TensorFlow基础笔记(0) 参考资源学习文档

    1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...

  9. TensorFlow基础笔记(3) cifar10 分类学习

    TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...

随机推荐

  1. 【NumberValidators】类库介绍

    NumberValidators是一个用于验证中国大陆证件.号码是否符合国家标准的类库,因为该类库在昨日已经正式发布1.0.0版本至nuget,所以在此介绍下该类库的具体功能. NumberValid ...

  2. WPF 捕捉全局异常

    public App() { //首先注册开始和退出事件 this.Startup += new StartupEventHandler(App_Startup); this.Exit += new ...

  3. WinForm中的图表控件Chart

    第一次接触Chart控件,发现了这个Chart控件的实例项目,非常强大,用示例的方法介绍了该控件各式各样的用法. 下载链接

  4. js事件处理

    1.js中常用的事件处理程序(event Handler) onabort 用户终止了页面的加载 onblur 用户离开了对象 onchange 用户修改了对象 onclick 用户点击了对象 one ...

  5. Kotlin 初体验

    本文由作者邹丽萍授权网易云社区发布. 背景 Kotlin 是 JetBrains 公司(著名的 IntelliJ IDEA 正是由这家公司开发的,Android Studio 也是基于 IDEA 的) ...

  6. (2)Oracle基础--表空间

    · 表空间概述 <1> 理解表空间 ① 表空间与数据库的关系: 表空间是数据库的逻辑存储空间,可以理解为在数据库中开辟的一块空间,用于存放数据库的对象. 一个数据库可以由多个表空间构成.O ...

  7. 聊聊并发(三)Java线程池的分析和使用

    1.    引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行. ...

  8. snmpv3-snmpd.conf解析

    1.先指定createUser语句,设置密码和传输密钥. createUser user1 createUser user2 MD5 user2password createUser user3 MD ...

  9. Code First 数据迁移 转

    一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrat ...

  10. FlowPortal-BPM——功能:判断数据库表中字段是否重复并阻止提交或保存

    一.JS添加代码,判断是否有OnSubmit事件 文件位置:YZSoft/Forms/src/Validator.js //=====判断是否有OnSubmit事件===== if (typeof ( ...