C#接口之接口定义

C#之接口定义与实现 今天我来讲一下关于oop中接口方面的知识,希望 阅读详情

从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。

定义接口的一般形式为:

[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]

说明:

· attributes(可选):附加的定义性信息。

· modifiers(可选):允许使用的修饰符有new和四个访问修饰符。分别是:new、public、protected、internal、private。在一个接口定义中同一修饰符不允许出现多次,new修饰符只能出现在嵌套接口中,表示覆盖了继承而来的同名成员。The public, protected, internal, and private修饰符定义了对接口的访问权限。

 

· 指示器和事件。

· identifier:接口名称。

· base-list(可选):包含一个或多个显式基接口的列表,接口间由逗号分隔。

· interface-body:对接口成员的定义。

· 接口可以是命名空间或类的成员,并且可以包含下列成员的签名: 方法、属性、索引器 。

· 一个接口可从一个或多个基接口继承。

接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以大写字母"I"开头。下面的代码是C#接口的一个例子,它与Java中的接口完全一样:

interface IShape  { 
    void Draw ( ) ;
}

如果你从两个或者两个以上的接口派生,父接口的名字列表用逗号分隔,如下面的代码所示:

interface INewInterface: IParent1, IParent2 { }

然而,与Java不同,C#中的接口不能包含域(Field)。另外还要注意,在C#中,接口内的所有方法默认都是公用方法。在Java中,方法定义可以带有public修饰符(即使这并非必要),但在C#中,显式为接口的方法指定public修饰符是非法的。例如,下面的C#接口将产生一个编译错误。

interface IShape { public void Draw( ) ; }

下面的例子定义了一个名为IControl 的接口,接口中包含一个成员方法Paint:

interface IControl {
void Paint( ) ;
}

在下例中,接口 IInterface从两个基接口 IBase1 和 IBase2 继承:

interface IInterface: IBase1, IBase2 {
   void Method1( ) ;
   void Method2( ) ;
}

接口可由类实现。实现的接口的标识符出现在类的基列表中。例如:

class Class1: Iface1, Iface2 {
   // class 成员。
}

类的基列表同时包含基类和接口时,列表中首先出现的是基类。例如:

class ClassA: BaseClass, Iface1, Iface2 {
   // class成员。
}

以下的代码段定义接口IFace,它只有一个方法:

interface IFace {
  void ShowMyFace( ) ;
}

不能从这个定义实例化一个对象,但可以从它派生一个类。因此,该类必须实现ShowMyFace抽象方法:

class CFace:IFace
{
  public void ShowMyFace( )   {
    Console.WriteLine(" implementation " ) ;
   } 
}

 

基接口

一个接口可以从零或多个接口继承,那些被称为这个接口的显式基接口。当一个接口有比零多的显式基接口时,那么在接口的定义中的形式为,接口标识符后面跟着由一个冒号":"和一个用逗号","分开的基接口标识符列表。

接口基:

接口类型列表说明:

· 一个接口的显式基接口必须至少同接口本身一样可访问。例如,在一个公共接口的基接口中指定一个私有或内部的接口是错误的。

· 一个接口直接或间接地从它自己继承是错误的。

· 接口的基接口都是显式基接口,并且是它们的基接口。换句话说,基接口的集合完全由显式基接口和它们的显式基接口等等组成。在下面的例子中

interface IControl {
	void Paint( ) ;
}
interface ITextBox: IControl {
	void SetText(string text) ;
}
interface IListBox: IControl {
	void SetItems(string[] items) ;
}
interface IComboBox: ITextBox, IListBox { }

IComboBox 的基接口是IControl, ITextBox, 和 IlistBox。

· 一个接口继承它的基接口的所有成员。换句话说,上面的接口IComboBox就像Paint一样继承成员SetText 和 SetItems。

· 一个实现了接口的类或结构也隐含地实现了所有接口的基接口。

接口主体

一个接口的接口主体定义接口的成员。

interface-body:
{   interface-member-declarationsopt   }
定义接口成员

接口可以包含一个和多个成员,这些成员可以是方法、属性、索引指示器和事件,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。接口定义创建新的定义空间,并且接口定义直接包含的接口成员定义将新成员引入该定义空间。

说明:

· 接口的成员是从基接口继承的成员和由接口本身定义的成员。

· 接口定义可以定义零个或多个成员。接口的成员必须是方法、属性、事件或索引器。接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。

· 定义一个接口,该接口对于每种可能种类的成员都包含一个:方法、属性、事件和索引器。

· 接口成员默认访问方式是public。接口成员定义不能包含任何修饰符,比如成员定义前不能加abstract,public,protected,internal,private,virtual,override 或static 修饰符。

· 接口的成员之间不能相互同名。继承而来的成员不用再定义,但接口可以定义与继承而来的成员同名的成员,这时我们说接口成员覆盖了继承而来的成员,这不会导致错误,但编译器会给出一个警告。关闭警告提示的方式是在成员定义前加上一个new关键字。但如果没有覆盖父接口中的成员,使用new关键字会导致编译器发出警告。

· 方法的名称必须与同一接口中定义的所有属性和事件的名称不同。此外,方法的签名必须与同一接口中定义的所有其他方法的签名不同。

· 属性或事件的名称必须与同一接口中定义的所有其他成员的名称不同。

· 一个索引器的签名必须区别于在同一接口中定义的其他所有索引器的签名。

· 接口方法声明中的属性(attributes), 返回类型(return-type), 标识符(identifier)和形式参数列表(formal-parameter-lis)与一个类的方法声明中的那些有相同的意义。一个接口方法声明不允许指定一个方法主体,而声明通常用一个分号结束。

· 接口属性声明的访问符与类属性声明的访问符相对应,除了访问符主体通常必须用分号。因此,无论属性是读写、只读或只写,访问符都完全确定。

· 接口索引声明中的属性(attributes),类型(type)和形式参数列表(formal-parameter-list)与类的索引声明的那些有相同的意义。

下面例子中接口IMyTest包含了索引指示器、事件E、方法F、属性P这些成员:

interface IMyTest{
    string this[int index] { get; set; }
    event EventHandler E ;
    void F(int value)  ;
    string P { get; set; }
}
public delegate void EventHandler(object sender, EventArgs e) ;

下面例子中接口IStringList包含每个可能类型成员的接口:一个方法,一个属性,一个事件和一个索引。

public delegate void StringListEvent(IStringList sender);
public interface IStringList
{
	void Add(string s);
	int Count { get; }
	event StringListEvent Changed;
	string this[int index] { get; set; }
}

 

接口成员的全权名

使用接口成员也可采用全权名(fully qualified name)。接口的全权名称是这样构成的。接口名加小圆点"." 再跟成员名比如对于下面两个接口:

interface IControl {
    void Paint( ) ;
}
interface ITextBox: IControl {
    void GetText(string text) ;
}

其中Paint 的全权名是IControl.Paint,GetText的全权名是ITextBox. GetText。当然,全权名中的成员名称必须是在接口中已经定义过的,比如使用ITextBox.Paint.就是不合理的。

如果接口是名字空间的成员,全权名还必须包含名字空间的名称。

namespace System
{
    public interface IDataTable {
        object Clone( ) ;
    }
}

那么Clone方法的全权名是System. IDataTable.Clone。

定义好了接口,接下来我们关心的就是怎样实现对接口的访问。这部分内容,我将在下一篇文章中和您进一步探讨。

 
《随笔十五》——C#中的 “ C#中的类定义、接口定义、屏蔽基类成员、 ” 目录 C#中的类定义 接口的定义 屏蔽基类成员 基类访问 C#中的类定义 class MyClass { //Members } 这样定义一个类后,就可以在项目中能访问该定义的其他位置对该类进行实例化。 在默认情况下, 类是内部的(internal)—— 即只有当前工程中的代码能够访问。 可以使用关键字 internal 写在 class 的前面 来显式指定这一点... 阅读详情

相关推荐

瑞萨电子经济型仿真器E2Lite.pdf

瑞萨经济型仿真器E2 emulator Lite (简称“E2 Lite”) 是具有flash存储器编程功能的片上调试仿真器,可以用于调试程序或将程序烧写到内置Flash存储器微控制器中。E2 Lite比E1更加便宜,性价比高。更适合业余爱好者, 教学, 以至专业开发人员使用。

E2 emulator Lite调试连接

RA、RL78和RX,系统配置如下:(如果将E2仿真器用作闪存编程器,请参阅【20pin引脚图】仿真器的1脚VCC用于供电;仿真器的2脚SWDIO用于调试程序;仿真器的3脚GND接地;仿真器的4脚SWCLK提供时钟;连接好以后即可用仿真器烧录和调试程序。

scalzi的博客 9394

E1/E20 Emulator, E2 Emulator Additional Document for User’s Manu

用户手册附加文件(RH850/F1L连接说明)

全面剖析C#接口编程之定义接口

从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。 定义接口的一般形式为: [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]说明: · attributes(可选):附加的定义性信息。 · modifiers(可选):允许使用的修饰符有new

八戒也编程 1526

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

weixin_44240228的博客 1万+

Jetson设备EXT4文件系统修复实战:从superblock损坏到系统恢复

本文详细介绍了Jetson设备因异常断电等原因导致EXT4文件系统superblock损坏后的诊断与修复实战。通过从健康设备移植fsck工具、使用备份超级块等步骤,指导用户逐步恢复系统,并提供了数据备份与预防措施,帮助用户有效应对嵌入式AI开发中的存储故障。

theta的博客 593

瑞萨烧录器使用

接口定义 烧录RX100系列 GND:2,12,14 MD:7 REST:13 VDD:8 烧录RL78系列 GND:2,12,14 MD:5 REST:13 VDD:8

qq_27893147的博客 1万+

浏览器主页被360篡改?教你彻底解决并预防再次发生

通过本文介绍的快捷方式修复、注册表清理、启动项管理三步法,可解决99%的浏览器主页篡改问题。权限最小化原则:非管理员账户日常使用,关键系统目录设置写保护定期安全审计:每月检查启动项/计划任务/浏览器扩展备份还原机制:创建系统还原点,重要操作前做好快照安全意识培养:不安装来源不明的软件,谨慎处理软件安装向导中的附加选项浏览器安全是系统防护的重要环节,建议结合EDR(终端检测与响应)方案构建立体防护体系。对于普通用户,保持系统更新、使用官方渠道下载软件、定期清理系统垃圾,即可有效预防绝大多数安全威胁。

nntxthml的博客 1万+

C#—类、接口定义

string和object类型是简单的引用类型,数组是隐式的引用类型,结构类型是值类型。我们创建的每个类都是引用类型。 类定义:        [internal或public] [abstract或sealed] class        {        } internal表示类只能在当前项目中访问,默认为internal;public表示类可以在任何地方访问(可由其它项目中的代

mse_Jun的博客 1158

DAGGER vs 传统模仿学习:为什么数据聚合能提升模型性能?

本文深入对比了DAGGER与传统模仿学习,揭示了传统方法因“分布不匹配”导致性能下降的根源。DAGGER通过动态的**数据聚合**机制,在智能体自身策略产生的状态分布上收集专家数据,从根本上解决了误差累积问题,从而显著提升了模型在实际部署中的鲁棒性和性能。

weixin_29170327的博客 234

uniapp:人脸识别功能,已测试,直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。

uniapp人脸识别功能,已测试可直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。 APP效果图:

sunluyi的博客 2226

C#接口定义

接口一般公开,使用public或internal,接口中可以包含类的常用成员(如:属性,方法,事件),但并不是类中的所有的成员都可以在接口中存在。接口中的成员默认就是公开的(public),public关键字必须省略。规律:通过类的实例访问的成员,统统在接口中不能存在。原因:接口不能实现化,只能被其他类实现。方法成员默认公开,不能实现,这点和抽象方法类似。方法成员是在接口中出现最多的一种成员。接口继承父接口,一个接口可以继承多个接口,一个类也能实现多个接口。接口的命名建议:接口命名一般建议使用大写I。

yoyo21ktime的博客 682

4、硬件工程师笔试面试知识器件篇——电阻(2025版本)

本文系统介绍了电阻的基础知识与应用。首先阐述了电阻的定义、工作原理及类型(固定/可变电阻),详细说明了常见电阻材料(碳膜、金属膜、线绕等)的特性与标记方法。重点分析了电阻在电路设计中的关键参数:功率计算需考虑1.5-2倍安全裕度,温度系数影响电路稳定性。文章还对比了不同封装形式(轴向/贴片/功率封装等)的适用场景,特别强调高功率电路需选择专用封装并做好散热设计。最后指出电路仿真可优化电阻选择,并列举了相关电子元件在设计中同样需要仿真验证。全文为硬件工程师提供了电阻选型的实用指导。

XU157303764的博客 5211

C# 接口定义带参函数

应该是很简单的一个写法问题,但是在网上找了好久找不到,后来试出来了,记录如下: 新建一个类做接口: public interface myinter { bool SaveInfo(string temp); } 调用接口: public partial class childclass: UserControl, myinter { public string SaveInfo(string temp) } 然后在外层类使用这个方法的时候: public bo

weixin_37778355的博客 1148

简要介绍 | 两阶段点云目标检测:理论与实践

目标检测是计算机视觉中的一个重要任务,其目的是识别和定位图像中的物体。对于二维图像,这已经有许多有效的方法。然而,对于三维数据(如由LiDAR生成的点云数据),目标检测则更为复杂。

NLOS的博客 1307

[Dify] 实现“多知识库切换”功能的最佳实践

知识库切换是提升AI问答系统精准度的关键技术。本文介绍了Dify平台实现多知识库切换的三种方式:静态配置、元数据过滤和动态切换,分析了各自的优缺点。最佳实践建议包括:合理分库设计、意图分类、主库优先检索等。文章还提供了示例工作流程和注意事项,帮助构建更智能、精准的知识驱动型问答系统。通过合理切换知识库,可显著提升回答相关性和系统性能。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 441

C#接口定义,索引器的定义

Normal07.8 磅02falsefalsefalseEN-USZH-CNX-NONE<w:LatentStyles DefLockedState="false" De

lxf544207706的专栏 4494

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C#】接口定义和使用知多少

最近在封装和参考sdk时,看到一个不错的写法,并且打破自己对接口和实现类固定的观念,这也充分说明自己理解掌握的知识点还不够深。

小5聊的博客 1950

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C#接口定义学习经验

<br />  本文介绍C#接口定义学习经验,接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。 <br /> <br />从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。C#接口定义的一般形式为:<br />[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]<br />说明:<br

liuzheng2684的专栏 457

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# 接口详解:定义、语法与编码规范

接口是描述类或结构应具备行为的规范,由方法、属性、事件、索引器等公共成员组成,不可包含字段、构造函数或常量。定义时需以大写“I”开头命名,如IChoose,成员默认为公开,无需显式声明访问修饰符。接口仅提供契约,不实现具体逻辑,类或结构实现时必须严格匹配其定义。

德仔 1515

C#接口定义的剖析

 接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。在前面的文章中,我们已经对C#接口的概念,如何定义接口以及如何对接口进行访问等问题进行了详细的讨论。在这些知识的基础上,本文我们将来了解实现接口的方法。显式实现接口成员为了实现接口,类可以定义显式接口成员执行体(Explicit interface memberi

ydp_00769的专栏 797

C#接口-接口定义

接口用来描述一种程序的规定,接口描述可属于任何类或结构的一组相关行为。实现接口的类或结构要与接口的定义严格一致。接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。 定义接口的语法如下: &lt;访问修饰符&gt; interface 接口名{//接口主体} 下面定义一个开关的接口,代码如下: public interface IChoo...

数据库天地 208

c#接口定义与应用

public interface IBankAccount //只能加public修饰符,或者什么都不加 { void Playin(decimal money); //函数前不加任何修饰符号 bool WithDrew(decimal money); decimal Account { get; ...

weixin_30379911的博客 80

C#中接口定义和理解

原贴:http://www.cnblogs.com/jiajiayuan/archive/2011/09/16/2178462.html 在编程中,我们经常会用到接口,那什么是接口呢? 接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。 接口使用interface 关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组

zhaoyipei的专栏 759
上一篇: 对接口成员的访问
下一篇: C#接口编程之接口概述
NETZHOU
博客等级 码龄24年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值