1. 接口的实现实际上和类之间的继承是一样的,也是重写了接口中的方法,让其有了具体的实现内容。

2. 但需要注意的是,在类中实现一个接口时必须将接口中的所有成员都实现,否则该类必须声明为抽象类,并将接口中未实现

  的成员以抽象方式实现。

在 C# 语言中实现接口的具体语法形式如下。

class  类名 : 接口名
    {
        //类中的成员以及实现接口中的成员
    }

以抽象方式实现接口中的成员是指将接口中未实现的成员定义为抽象成员,示例代码如下。

  interface ITest

  {  

    string name{ get; set}  

    void Print();

  }

  abstract class Test : ITest

  {

  1.  public abstract string name { get; set; }
  1.  public abstract void Print();

  }

  从上面的代码可以看出,在实现类 Test 中将未实现的属性和方法分别定义为抽象属性和抽象方法,并将实现类定义为抽象类。

  这是一种特殊的实现方式,在实际应用中通常是将接口中的所有成员全部实现。

  在实际应用中隐式实现接口的方式比较常用,由于在接口中定义的成员默认是 public 类型的,隐式实现接口成员是将接口的

  所有成员以 public 访问修饰符修饰(尝试用其他修饰符修饰会报错的)。

  显式实现接口是指在实现接口时所实现的成员名称前含有接口名称作为前缀。

  需要注意的是使用显式实现接口的成员不能再使用修饰符修饰,即 public、abstract、virtual、 override 等。

  隐式:

    

  1. class ComputerMajor : ICompute
  2. {
  3.   public int Id { get; set; }             //隐式的实现接口中的属性
  4.   public string Name { get; set; }         //隐式实现接口中的属性
  5.   public double English { get; set; }       //新增属性
  6.   public double Programming { get; set; }  //新增属性
  7.   public double Database { get; set; }      //新增属性
  8.   public void Avg()                 //隐式实现接口中的方法
  9.   {
  10.     double avg = (English + Programming + Database) / 3;
  11.     Console.WriteLine("平均分:" + avg);
  12.   }
  13.   public void Total()                                         //隐式实现接口中的方法
  14.   {
  15.     double sum = English + Programming + Database;
  16.     Console.WriteLine("总分为:" + sum);
  17.   }
  18. }

  从上面的代码可以看出,所有接口中的成员在实现类 ComputerMajor 中都被 public 修饰符修饰。

  显式:

    

  class ComputerMajor : ICompute
  {
  public double English { get; set; }
  public double Programming { get; set; }
  public double Database { get; set; }
  int ICompute.Id { get; set; } //显示实现接口中的属性
  string ICompute.Name { get; set; } //显示实现接口中的属性
  void ICompute.Total() //显示实现接口中的方法
  {
  double sum = English + Programming + Database;
  Console.WriteLine("总分数:" + sum);
  }
  void ICompute.Avg()
  {
  double avg = (English + Programming + Database) / 3;
  Console.WriteLine("平均分为:" + avg);
  }
  }
  从上面的代码可以看出,在使用显式方式实现接口中的成员时,所有成员都会加上接口名称 ICompute 作为前缀,并且不加任何修饰符。
  
  调用:
  ComputerMajor computerMajor = new ComputerMajor();
  ICompute compute = computerMajor; //创建接口的实例
  compute.Total();
  compute.Avg();
  
  一般多个接口里面有相同的方法时,我们也会显示的指定是哪个接口中的方法,即显示的实现接口。

  
接口 抽象类
在接口中仅能定义成员,但不能有具体的实现。 抽象类除了抽象成员以外,其他成员允许有具体的实现。
在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符。 在抽象类中能声明任意成员,并能使用任何修饰符来修饰。
接口能使用类或者结构体来继承。 抽象类仅能使用类继承。
在使用类来实现接口时,必须隐式或显式地实现接口中的所有成员,否则需要将实现类定义为抽象类,并将接口中未实现的成员以抽象的方式实现。 在使用类来继承抽象 类时允许实现全部或部分成员,但仅实现其中的部分成员,其实现类必须也定义为抽象类。
一个接口允许继承多个接口。 一个类只能有一个父类。
												

interface Part3(实现:显示和隐式)的更多相关文章

  1. Intent 显示意图 隐式意图

    //显式意图  :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起) // 一般激活自己应用的组件的时候 采用显示意图  //隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之 ...

  2. C#接口的显示和隐式实现

    早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...

  3. C# 转换符的重载 显示、隐式转换

    class Complex { //保存转换的值 Int32 v; public Complex(Int32 x) { v = x; } public Int32 ToInt32() { return ...

  4. Android中显示和隐式Intent的使用

    显示启动activity                                                                                         ...

  5. label标签的显示和隐式关联问题

    按钮的html <!-- 学校 --> <div class="layui-inline"> <label class="layui-for ...

  6. angularJS1笔记-(7)-控制器的合理使用(显示和隐式的依赖注入)

    AngularJS依赖注入 1.隐式注入:不需要开发人员干预,angularJS自动根据参数的名称识别和注入数据 app.controller("myCtrl".function( ...

  7. Android中Intent的显示和隐式使用

    Android应用程序中组件之间的通信都少不了Intent的使用,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件, ...

  8. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  9. python+selenium基础篇,三种等待方式,显示、隐式、强制等待

    1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...

随机推荐

  1. 【笔试题】某公司中有N名员工。给定所有员工工资的清单

    排列员工工资顺序(C++map解法) 题目描述:某公司中有N名员工.给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资.他按照工资的频次降序排列.即给定清单中所有频次较高的工资将在频次较低 ...

  2. IDEA分配内存无效

    idea改启动内存分配, 改 C:/Users/xxx/.IntelliJIdea2018.1/confing/idea64.exe.vmoptions 或 C:/Users/xxx/.Intelli ...

  3. 软件定义网络基础---SDN控制平面

    一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑.  对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量:  通过北向接口向上层应用开放多个层次的可编程能 ...

  4. Glide升级到4.x版本遇到的问题

    Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency ...

  5. css样式圆角和一定的透明度

    css样式里可以用border-radius把div或图片变成带有一定圆角的,如果是div本身是正方形,设置圆角度是百分之五十,就是圆形. border-radius:值可以是具体的px数值,也可以是 ...

  6. 【Leetcode_easy】985. Sum of Even Numbers After Queries

    problem 985. Sum of Even Numbers After Queries class Solution { public: vector<int> sumEvenAft ...

  7. 安卓微信overflow-x overflow-y引发的bug

    今天xgo文章图片页上线用微信扫页面发现一个bug,页面可以双击放大缩小. 找了半天原因,发现是图片描述设置了overflow-y引发的bug. 建议在微信场景里满屏显示不能滚动的页面里慎用overf ...

  8. 避免复制引用程序集的XML文件

    VS在编译时,默认会复制所有引用程序集对应的XML文件到输出目录. 在项目中设置AllowedReferenceRelatedFileExtensions可以避免复制操作. <PropertyG ...

  9. certutil在传输payload中的新奇技巧

    好久没更新博客了,最近在实习的过程中还是见识到不少东西. 不多说,直接开始正文. 首先说一下certutil在渗透测试中用到的特别多,下载文件,计算hash,以及base64编码等等. 在这里介绍ba ...

  10. 2019年广东省赛gdccpc回顾

    本次比赛状态一般般,热身赛单人挂机爆零让自己慌了一整天. 开题直接抓E题入手,准备交题后关机(辣鸡云桌面),开机后又告诉我要关机,心急连交两发结果都WA了,最后靠队员提醒救了回来.心态还算稳住了.后面 ...