interface Part3(实现:显示和隐式)
1. 接口的实现实际上和类之间的继承是一样的,也是重写了接口中的方法,让其有了具体的实现内容。
2. 但需要注意的是,在类中实现一个接口时必须将接口中的所有成员都实现,否则该类必须声明为抽象类,并将接口中未实现
的成员以抽象方式实现。
在 C# 语言中实现接口的具体语法形式如下。
class 类名 : 接口名
{
//类中的成员以及实现接口中的成员
}
以抽象方式实现接口中的成员是指将接口中未实现的成员定义为抽象成员,示例代码如下。
interface ITest
{
string name{ get; set}
void Print();
}
abstract class Test : ITest
{
- public abstract string name { get; set; }
- public abstract void Print();
}
从上面的代码可以看出,在实现类 Test 中将未实现的属性和方法分别定义为抽象属性和抽象方法,并将实现类定义为抽象类。
这是一种特殊的实现方式,在实际应用中通常是将接口中的所有成员全部实现。
在实际应用中隐式实现接口的方式比较常用,由于在接口中定义的成员默认是 public 类型的,隐式实现接口成员是将接口的
所有成员以 public 访问修饰符修饰(尝试用其他修饰符修饰会报错的)。
显式实现接口是指在实现接口时所实现的成员名称前含有接口名称作为前缀。
需要注意的是使用显式实现接口的成员不能再使用修饰符修饰,即 public、abstract、virtual、 override 等。
隐式:
- class ComputerMajor : ICompute
- {
- public int Id { get; set; } //隐式的实现接口中的属性
- public string Name { get; set; } //隐式实现接口中的属性
- public double English { get; set; } //新增属性
- public double Programming { get; set; } //新增属性
- public double Database { get; set; } //新增属性
- public void Avg() //隐式实现接口中的方法
- {
- double avg = (English + Programming + Database) / 3;
- Console.WriteLine("平均分:" + avg);
- }
- public void Total() //隐式实现接口中的方法
- {
- double sum = English + Programming + Database;
- Console.WriteLine("总分为:" + sum);
- }
- }
从上面的代码可以看出,所有接口中的成员在实现类 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(实现:显示和隐式)的更多相关文章
- Intent 显示意图 隐式意图
//显式意图 :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起) // 一般激活自己应用的组件的时候 采用显示意图 //隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之 ...
- C#接口的显示和隐式实现
早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...
- C# 转换符的重载 显示、隐式转换
class Complex { //保存转换的值 Int32 v; public Complex(Int32 x) { v = x; } public Int32 ToInt32() { return ...
- Android中显示和隐式Intent的使用
显示启动activity ...
- label标签的显示和隐式关联问题
按钮的html <!-- 学校 --> <div class="layui-inline"> <label class="layui-for ...
- angularJS1笔记-(7)-控制器的合理使用(显示和隐式的依赖注入)
AngularJS依赖注入 1.隐式注入:不需要开发人员干预,angularJS自动根据参数的名称识别和注入数据 app.controller("myCtrl".function( ...
- Android中Intent的显示和隐式使用
Android应用程序中组件之间的通信都少不了Intent的使用,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件, ...
- 【Selenium】显示、隐式等待
显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...
- python+selenium基础篇,三种等待方式,显示、隐式、强制等待
1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...
随机推荐
- 软件定义网络基础---SDN控制平面
一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑. 对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量: 通过北向接口向上层应用开放多个层次的可编程能 ...
- 提供对字符串的全角->半角,半角->全角转换
package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...
- 【Linux】 新建用户并授权
一.创建新用户 1.创建一个新用户:laofan [root@localhost ~]# adduser laofan 2.为新用户创建初始化密码 [root@localhost~]# passwd ...
- Oracle 自动生成的视图VM_NSO_1
作者:Jerry 有时候优化sql的时候,在执行计划中看到有VM_NSO_X的视图,在Oracle定义中,可以吧NSO理解为nested subquery optimizing,功能就是把in转换为j ...
- linux本地检测tomcat是否启动成功
@参考文章 原文如下: linux本地检测如何tomcat是否启动成功? 解决方法: 1.curl 127.0.0.1:8080 第一可以知道本地是否可以访问tomcat,返回页面代码 2.tail ...
- python flask框架学习(一)——准备工作和环境配置与安装
Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...
- Flink 异步IO访问外部数据(mysql篇)
接上篇:[翻译]Flink 异步I / O访问外部数据 最近看了大佬的博客,突然想起Async I/O方式是Blink 推给社区的一大重要功能,可以使用异步的方式获取外部数据,想着自己实现以下,项目上 ...
- replicationController 使用
[root@lab2 nginx-harbor]# cat http-test.yaml apiVersion: v1 kind: ReplicationController metadata: na ...
- kafka如果有多个patition,消费消息的时候消息是没有顺序的
创建一个2个分区,3个副本的topic,名字叫first kafka-topics.sh --create --zookeeper datanode1:2181 --partitions 2 --r ...
- Selenium IDE命令
Selenium IDE中提供了丰富的操作命令,在Selenium IDE的Command的下拉列表框中可以选择使用这些命令. 下面介绍一些常用命令的使用. 1.open open(url) 在浏览器 ...