当前位置: 首页 > 编程日记 > 正文

(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员

10.3  接口的实现

在继续前,先讨论一下如何定义和实现接口。第9章介绍了接口定义的方式与类相似,使用的代码如下:

interface IMyInterface {// Interface members.
}

接口成员的定义与类成员的定义相似,但有几个重要的区别:

不允许使用访问修饰符(public、private、protected或internal),所有的接口成员都是公共的。

接口成员不能包含代码体。

接口不能定义字段成员。

接口成员不能用关键字static、virtual、abstract或sealed来定义。

类型定义成员是禁止的。

但要隐藏继承了基接口的成员,可以用关键字new来定义它们,例如:

interface IMyBaseInterface {void DoSomething();
}interface IMyDerivedInterface : IMyBaseInterface {new void DoSomething();
}

其执行方式与隐藏继承的类成员的方式一样。

在接口中定义的属性可以定义访问块 get 和 set 中的哪一个能用于该属性(或将它们同时用于该属性),例如:

interface IMyInterface {int MyInt( get; set; )
}

其中int属性MyInt有get和set存取器。对于访问级别有更严限制的属性来说,可以省略它们中的任一个。

note : 这个语法类似于自动属性,但自动属性是为类(而不是接口)定义的,自动属性必须包含get和set存取器。

接口没有指定应如何存储属性数据。接口不能指定字段,例如用于存储属性数据的字段。最后,接口与类一样,可以定义为类的成员(但不能定义为其他接口的成员,因为接口不能包含类型定义)。

在类中实现接口

现接口的类必须包含该接口所有成员的实现代码,且必须匹配指定的签名(包括匹配指定的get和set块),并且必须是公共的。例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyClass : IMyInterface {public void DoSomething() {}public void DoSomethingElse() {}
}

可以使用关键字 virtual 或 abstract 来实现接口成员,但不能使用 static 或 const。还可以在基类上实现接口成员,例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyBaseClass {  // 注意这里的基类并没有继承接口public void DoSomething() {}
}public class MyDerivedClass : MyBaseClass, IMyInterface {// DoSometing()接口在基类中实现public void DoSomethingElse() {}
}

继承一个实现给定接口的基类,就意味着派生类隐式地支持这个接口,例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyBaseClass : IMyInterface {public virtual void DoSomething() {}public virtual void DoSomethingElse() {}
}public class MyDerivedClass : MyBaseClass {public override void DoSomething() {}
}

显然,在基类中把实现代码定义为虚拟,派生类就可以替换该实现代码,而不是隐藏它们。如果要使用new关键字隐藏一个基类成员,而不是重写它,则方法IMyInterface.DoSomething()就总是引用基类版本,即使通过这个接口来访问派生类,也是这样

1. 显示实现接口成员

也可以由类显式地实现接口成员。如果这么做,该成员就只能通过接口来访问,不能通过类来访问。上一节的代码中使用的隐式成员可以通过类和接口来访问

例如,如果类MyClass隐式地实现接口IMyInterface的方法DoSomething(),如上所述,则下面的代码就是有效的:

MyClass myObj = new MyClass();
myObj.DoSomething();

下面的代码也是有效的:

MyClass myObj = new MyClass();
IMyInterface myInt = myObj;
myInt.DoSomething();

另外,如果MyDerivedClass显式实现DoSomething(),就只能使用后一种技术(只能用接口访问)。其代码如下:

public class MyClass : IMyInterface {void IMyInterface.DoSomething() {  // 显示实现
        }public void DoSomethingElse() {}
}

其中 DoSomething()是显式实现的,而 DoSomethingElse()是隐式实现的。只有后者可以直接通过MyClass的对象实例来访问。

转载于:https://www.cnblogs.com/wodehao0808/p/4961494.html

相关文章:

JVM架构解析

本文阐述了JVM的构成和组件,配图清晰易懂,是学习Java开发者的入门必读文章。 每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行。但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JV…

cmd实用命令

1.netstat 查看电脑端口状况 实际应用举例:查看某软件坚监听的电脑端口。 在任务管理器中选择列...,打开PID的显示。在这里查看某个应用程序的线程ID是多少。例如QQ:4904. 运行,cmd,输入netstat -ano,显示当…

嵌入式BootLoader技术内幕(三)

四、 关于串口终端 在 boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题…

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020 时长:16h 55m |视频:. MP4 1280x720,30 fps(r) |音频:AAC,44100 Hz,2ch |大小:15.5 GB 共62小节课程 流派:电子学习|语言:英语中文字幕(机译)含…

Java学习总结:9

继承 继承性是面向对象的第二大主要特征,而继承性要解决的就是代码重用的问题,利用继承性可以从已有的类继续派生出新的子类,也可以利用子类扩展出更多的操作功能。 继承的实现 继承的格式 class 子类 extends 父类 {}子类实际上是将父类…

转 小辉_Ray CORS(跨域资源共享)

前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享)。虽然前些天也看了一下CORS相关的文章,但是今天兴趣一来还是亲自地写篇博客来研究一…

使用dd命令复制ASM磁盘的spfile

通过下面sql查询参数文件在ASM磁盘中的AU分布SELECT x1.file_number,x1.name,x2.GROUP_KFFXP,x2.DISK_KFFXP,x2.AU_KFFXP,x3.pathFROM (SELECT *FROM (SELECT t1.GROUP_NUMBER, t1.FILE_NUMBER, t2.NAME, rownum AS rnFROM v$asm_file t1LEFT JOIN v$asm_alias t2ON t1.FILE_NU…

[转载]IPMSG(飞鸽传书)协议翻译

/***********************************************************本人(ypxing)根据下面的协议,C语言写的ipmsg(聊天,文件/文件夹传输)*请参见:http://blog.chinaunix.net/u1/35100/showart_689330.html**************************************…

SketchUp Pro 2021基础入门学习视频教程

SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语中文字幕(根据原英文字幕机译更准确) |时长:74节课(7h 31m) |大小:4.9 GB 含课程工程文件…

Java学习总结:10

覆写 在子类定义属性或方法时,有可能出现定义的属性或方法与父类同名的情况,这样的操作就称为覆写。 方法的覆写 当子类定义了和父类的方法名称、返回值类型、参数类型及个数完全相同的方法时,就称为方法的覆写。 class A1{public void f…

ubuntu中启用ssh服务

ssh程序分为有客户端程序openssh-client和服务端程序openssh-server。如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的。而如果需要从远程连接到本机,则需要安装openssh-server,该程序需要自己安装。…

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都…

解决文字无法缩小的问题

在css设置文字大小的时候,到12px 的时候你在怎么缩小他,他的大小就是不变font-size:百分比来控制也不起作用-webkit-transform: scale(0.8); -o-transform: scale(1); display: inline-block; 转载于:https://www.cnblogs.com/xinlinux/p/408…

asp.net图片浏览器效果

技术来源于同学会实践 前台设计 <% Page Language"C#" AutoEventWireup"true" CodeFile"txh.aspx.cs" Inherits"txh" %> <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head runat&qu…

Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading

Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading CGCookie–Blender材质和着色基础 教程大小解压后&#xff1a;3.1G 共6大章 45小节课…

Java学习总结:11(final关键字)

final关键字 在Java中final称为终结器&#xff0c;在Java中可以使用final定义类、方法和属性。 一.使用final定义的类不能再有子类&#xff0c;即&#xff1a;任何类都不能继承以final声明的父类。 在设计类的时候&#xff0c;如果这个类不需要有子类&#xff0c;类的细节不…

2022-2028年中国汽车制动器行业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国汽车制动器行业市场行业相关概述、中国汽车制动器行业市场行业运行环境、分析了中国汽车制…

[转]优秀编程的“艺术”

优秀的代码是一件艺术品&#xff1f;或者软件工艺宣言言过其实了&#xff1f;成为一名“优秀”的程序员&#xff0c;有什么要求&#xff1f; 设想你雇佣了一名水管工&#xff0c;让他更换地下室的旧管道。这个家伙在工作之前、之中、之后&#xff0c;他就没有停止过谈论他的管道…

洛谷 P5019 铺设道路(差分)

嗯... 题目链接&#xff1a;https://www.luogu.org/problem/P5019 首先简化一下题意&#xff1a; 给定一个长为N的数组&#xff0c;每次操作可以选择一个区间减去1&#xff0c;问最少多少次操作可以将数组中的数全变成0 N≤100000 思路&#xff1a; 首先对于第一个数字d_1我们至…

1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere

1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere 1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere 时长1h 2m 1280X720 MP4 语言&#xff1a;英语中文字幕…

BIO、NIO、AIO详解

BIO(Blocking I/O)就是传统的Java IO编程,其相关的类和接口在java.io包下。BIO是同步阻塞的,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)服务器端启动一个,注册端口,调用accpet方法监听客户端的Socket连接客户端启动Socket对服务器进行通信,默认情况下服务器端需要对每个客户建立一个线程与之通讯。

Java学习总结:12

多态性 1.方法的多态性&#xff1a;重载和覆写 重载&#xff1a;同一个方法名称&#xff0c;根据不同的参数类型及个数可以完成不同的功能&#xff1b; 覆写&#xff1a;同一个方法&#xff0c;根据不同的实例化的子类对象不同&#xff0c;所完成的功能也不同。 2.对象的多态性…

10万字总结Java8到21新特性详解

Java 8 是Java历史上一个重大的版本更新,发布于2014年3月18日。Lambda 表达式是在 Java 8 中引入,并且被吹捧为 Java 8 最大的特性。它是函数式编程的的一个重要特性,标志着 Java 向函数式编程迈出了重要的第一步。或者其中parameters:是 Lambda表达式的参数列表,可以为空或包含一个或多个参数。->:是 Lambda 操作符,用于将参数和 Lambda 主体分开。expression:是 Lambda 表达式的返回值,或者在主体中执行的单一表达式。

10万字总结Java8到21新特性详解

Java 17,发布于 2021 年 9 月,是一个长期支持(LTS)版本。Java 18,于2022年3月发布。Java 19, 于2022-09-20 发布众所周知,JVM 是一个多线程环境,它通过为我们提供了对操作系统线程的抽象,但是 Java 中的线程都只是对操作系统线程的一种简单封装,我们可以称之为“平台线程”。代价昂贵:创建平台线程的成本很高。每当创建一个平台线程时,操作系统都必须在堆栈中分配大量内存来存储线程的上下文、原生调用堆栈和 Java 调用堆栈。

iOS 对UIImage进行的一些操作

1、生成指定宽高的UIImage对象(oldImage为原始图片对象,newImage为操作后的图片对象) // 参数1:图片的尺寸 参数2:是否透明(没看出YES和NO有什么区别) 参数3:缩放(1表示不缩放) (1) UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) (2) U…

mysql基础之视图

原文:mysql基础之视图 在查询中,我们经常把查询结果 当成临时表来看. View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影. 既然视图只是表的某种查询的投影,所以主要步骤在于查询表上.查询的结果命名为视图就可以了. 视图与表的关系 视图是表的查询结果,自然…

Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC

Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC Patreon – Cartoon Groom…

2.抽取代码(BaseActivity)

知识点俩种退出程序的方法复制集合同步的用法字符数组工厂模式&#xff0c;生产fatgment&#xff0c;解决了碎片重复创建的问题全局上下文actionbar用法fargmentadapter&#xff0c;当viewpager里是fargment的话更方便1.抽取BaseActivity 管理所有activity 方便退出 public c…

C语言画圆(编译器:VS2013)

一.graphics.h库的添加 方法一 先下载所需文件&#xff1a; graphic头文件解决方法&#xff08;密码&#xff1a;6z3y&#xff09; 1.先打开include文件夹 2.将里面的文件复制粘贴到VS2013安装目录的include文件夹中&#xff0c;如下&#xff1a; 3.打开下载好的文件夹中的…

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。 1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存&#xff0c;这个数值不能准确的反应堆内存的真实占用情况&#xff0c;因为GC过后这个值是不会变化的&#xff0c;因此内存调优的时…