C#中的interface

接口(interface

接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。

 

接口实际上是一个约定:

如:IClonable, IComparable;

接口是抽象成员的集合:

ICloneable含有方法clone();

IComparable含有方法compare();

接口是一个引用类型,比抽象更抽象。

 

帮助实现多重继承:

 

接口的用处:

1.实现不相关类的相同行为,不需要考虑这些类的层次关系;

2.通过接口可以了解对象的交互界面,而不需要了解对象所在的类。例如:public sealed class String: ICloneable, IComparable, IConvertible, IEnumerable.

 

定义一个接口:

 

public interface IStringList //接口一般用I作为首字母

{//接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员//使用接口时不能声明抽象成员(不能直接new实例化)void Add ( string s ) ;  int Count{ get; } string this[int index] { get; set; } }//public abstract 默认,这两个关键词不写出来

 

 

实现接口:

 

class 类名 : [父类 , ] 接口, 接口, 接口, ..... 接口{public 方法 () { ...... }}

 

 

显示接口成员实现:

在实现多个接口时,如果不同的接口有同名的方法,为了消除歧义,需要在方法名前写接口名: void IWindow.Close(){......};

调用时,只能用接口调用: (( IWindow ) f ).Close();

 

接口示例:

using System;namespace TestInterface
{interface Runner{void run();}interface Swimmer{void swim();}abstract class Animal  //抽象类用作基类
    {abstract public void eat();}class Person : Animal, Runner, Swimmer{public void run(){Console.WriteLine("run");}public void swim(){Console.WriteLine("swim");}public override void eat(){Console.WriteLine("eat");}public void speak(){Console.WriteLine("speak");}}class Program{        static void m1(Runner r){r.run();}static void m2(Swimmer s){s.swim();}static void m3(Animal a){a.eat();}static void m4(Person p){p.speak();}public static void Main(string [] args){Person p = new Person();m1(p);m2(p);m3(p);m4(p);Runner a = new Person();a.run();Console.ReadKey(true);}}
}

运行结果:

 

含有同名方法的多个接口继承:

using System;
class InterfaceExplicitImpl
{static void Main(){FileViewer f = new FileViewer();f.Test();( (IWindow) f ).Close();  //强制转换,消除同名歧义
          IWindow w = new FileViewer();w.Close();Console.ReadKey(true);}
}interface IWindow
{void Close();
}
interface IFileHandler
{void Close();
}
class FileViewer : IWindow, IFileHandler
{void IWindow.Close (){Console.WriteLine( "Window Closed" );}void IFileHandler.Close(){Console.WriteLine( "File Closed" );}public void Test(){( (IWindow) this ).Close(); //不同接口含有同名方法,需要在方法前面写接口名
    }
}

 

转载于:https://www.cnblogs.com/bincoding/p/4869804.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网易不进垃圾箱html,腾讯QQ、网易126、163邮箱发送邮件进入垃圾箱及收不到邮件怎么办?...

近期有用户反馈在云奇付(www.361ser.com)会员中心通过腾讯QQ邮箱、网易126、163邮箱绑定账号及安全验证无法正常收取或收不到云奇付发送的邮件怎么办?其实这是因为QQ邮箱、126邮箱、163邮箱等其它邮箱都有反垃圾邮件机制,很多企业网站的邮件都被误拦截到…

java技术分享主题_Java开发入门:适合新手练手的Java项目(附源码下载)

Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个神话。虽然不少人曾抱怨Java语言就像老太太的裹脚布,又臭又长,有时写了500行都不能表达程序员的意图。但从市场上的招聘现状看,Java工…

ehcache 缓存丢失_解决Ehcache缓存警告问题

警告: Creating a new instance of CacheManager using the diskStorePath "D:\Apache Tomcat 6.0.18\temp" which is already used by an existing CacheManager.The source of the configuration was classpath.The diskStore path for this CacheManager will be …

html简单父子页面,js 的 iframe 父子页面通信的简单方法

1、获取 子页面 的 window 对象在父页面中,存在如下两个对象window.framesdocument.iframeElement.contentWindow可以获取到 子页面 window 对象// iframe iddocument.getElementById(menuIframe).contentWindow// iframe namewindow.frames[menuIframe].window// i…

uni app 调用网络打印机_uni-app 的使用体验总结

[实践] uni-app 的使用总结最近使用 uni-app 的感受。使用体验没用之前以为真和 Vue 一样,用了之后才知道。有点类似 Vue 和 小程序结合的感觉。写类似小程序的标签,有着小程序和 Vue 的生命周期钩子。对比 uni-app 文档和微信小程序的文档,不…

iOS开发——高级篇——二维码的生产和读取

一、二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字):纯文本名片URL // 1. 实例化二维码滤镜 …

python 地址_python 解析地址 | 学步园

socekt.getaddrinfo的返回值介绍family: 表示socket使用的协议簇。常用的协议簇包括AF_UNIX(本机通信)/AF_INET(TCP/IP协议簇中的IPv4协议)/AF_INET6(TCP/IP协议簇中的IPv4协议)。在python的socket包中,用1表示AF_UNIX,2表示AF_INET,10表示AF…

html 微信发送给朋友,H5链接分享给微信好友,显示标题、描述、缩略图

效果展示image.png1.公众号设置1.1公众号需要经过认证,具有分享接口功能image.png1.2填写正确的域名(域名需要经过备案)image.png1.3 保存好AppID、AppSecret、设置好ip白名单(非常重要)image.png2.php代码(需要有php环境下,放到域名目录下)2.1展示下目录…

python怎么创建变量_python怎么创建变量

变量(variable)是学习python初始时,就会接触到的一个新的知识点,也是一个需要熟知的概念。python是一种动态类型语言,在赋值的执行中可以绑定不同类型的值,这个过程叫做变量赋值操作,赋值同时确定了变量类型。在python…

nginx 学习笔记【持续更新...】

1.如果在安装过程中出现以下错误 需要安装pcre库 解决方案:yum install pcre 2.如果nginx启动提示端口被占用,则停止该端口的服务再启动nginx,一般为httpd服务 解决方案:service httpd stop 3.nginx下php编译 ./configure --prefix/usr/local/fastphp …

python问号表达式_python中的问号表达式

我们知道C语句中存在问号表达式,例如下面:1a2>1? 10: -10;那么,Python脚本语言中是否也存在类似的问号表达式呢?答案是肯定的。而且存在两种方式。方式1:使用if else实现如下例:1b 5a 2 if b 4 else 1p…

计算机入门在线阅读,电脑入门基础教程..doc

PAGEPAGE 8大学计算机基础实验指导书A班2013年9月实验一 windows基本操作、系统环境一、实验目的1.熟悉Windows的基本知识和基本操作。2.熟悉Windows的程序管理。3.熟悉“Windows资源管理器”和“我的电脑”的使用。4.熟悉文件和文…

efcore 实体配置_创建并配置模型

创建并配置模型Creating and configuring a model10/13/2020本文内容Entity Framework 使用一组约定基于实体类的形状构建模型。Entity Framework uses a set of conventions to build a model based on the shape of your entity classes. 可指定其他配置以补充和/或替代约定的…

python怎么放音乐_python怎么播放音乐

Python播放音乐要使用pygame模块 首先安装pygame模块:pip install pygame 方法实现:def play_music(self): filepath r"E:\music\消愁.mp3"; pygame.mixer.init() # 加载音乐 pygame.mixer.music.load(filepath) pygame.mixer.music.play(sta…

sprintf_s与_snprintf与_snprintf_s

MSDN页面分别如下: spirntf_s: http://msdn.microsoft.com/zh-cn/library/ce3zzk1k%28VS.80%29.aspx _snprintf: http://msdn.microsoft.com/zh-cn/library/2ts7cx93%28vVS.90%29.aspx _snprintf_s: http://msdn.microsoft.com/zh-cn/library/f30dzcf6.aspx 三个页面…

git ssh配置文件 服务器_git登录ssh服务器

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)

在日常工作中,我们经常需要在excel中输入分数,默认情况下,当我们直接输入分数,比如输入“9/16” 回车后,会发现系统显示的却是日期数据,如下图所示,那么分数该怎么输入呢?今天就来和…

python终止线程_Python里怎么终止一个线程

Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threading import *import timeclass MyThread(Thread): def run (self): self.ifdo True; while self.ifdo: print I am running... time.sleep(2) def stop (se…

C#中的多线程

1简介及概念 C# 支持通过多线程并行执行代码,线程有其独立的执行路径,能够与其它线程同时执行。 一个 C# 客户端程序(Console 命令行、WPF 以及 Windows Forms)开始于一个单线程,这个线程(也称为“主线程”…

word 7桌面上的计算机图标是,怎么设置win7系统桌面图标都变成word图标的处理办法...

随着电脑的使用率越来越高,我们有时候可能会遇到win7系统桌面图标都变成word图标问题,如果我们遇到了win7系统桌面图标都变成word图标的问题,要怎么处理win7系统桌面图标都变成word图标呢?我们只用  双击打开桌面上的计算机文件…