声明接口
接口声明不包含数据成员。
接口声明只能包含如下类型的静态成员函数:
方法
属性
事件
索引
函数成员的声明不能包含任何实现代码,而在每一个成员声明的主体后必须使用分号。
按照惯例,接口名称必须从I开始(比如ISaceable)。
接口的访问性和接口成员的访问性之间的区别:
接口声明可以有任何的访问修饰符public,protected,internal或private。
接口的成员是隐式public的,不允许有任何访问修饰符,包括public。
public interface IMyInterface2
{
private int Methed1(int nVal1,long lVar2); //错误,接口成员不允许访问修饰符。
}
实现接口
使用类和结构来实现接口。要实现接口必须:
在街垒列表中包括接口名称。
为每一个接口的成员提供实现。
class MyClass:IMyInterface1
{
int DoStuff(int nVar1,long lVar2)
{...} //实现代码
double DoOtherStuff(string s,long x)
{....} //实现代码
}
如果实现了接口,则它必须实现接口的所有成员。
如果类从基类继承并实现接口,基类列表中的基类名称必须放在任何接口之前。
class MyClass:MyBaseClass,IMyInterface1,IMyInterface2
{
...
}
接口是引用类型
接口不仅仅是类或结构要实现的成员列表。它是一个引用类型。
IMyInterface1 imy=new MyClass(); //多态
IMyInterface1 imy=(IMyInterface1)new MyClass(); //强转
接口和as运算符
as运算符与接口配合使用
如果尝试强制转换类对象引用为类未实现的接口的引用,强制转换操作会抛出一个异常。可以通过使用as运算符来避免这个问题:
如果类实现了接口,表达式返回指向接口的引用。
如果类没有实现接口,表达式返回null,而不抛出异常。
如下代码演示了as运算符的使用: a 被作为 ILiveBrith的引用 或 null 赋值给 b。
ILiveBrith b=a as ILiveBirth;
实现多个接口
类或结构可以实现任意数量的接口。
所以实现的接口必须列在基类列表中并以逗号分隔(如果有基类名称,则在其之后)。
实现具有重复成员的接口
由于类可以实现任意数量的接口,有可能两个或多个接口成员都有相同的签名和返回类型。
这种情况下,类可以实现单个成员来满足所有包含重复成员的接口。
多个接口的引用
MyClass ob=new MyClass();
IMyInterface1 imy = ob;
IMyInterface2 imy = ob;
派生成员作为实现
实现接口的类可以从它的基类继承实现的代码。
interface IIfc1{ void PrintOut(string s);}
class MybaseClass
{
public void PrintOut(string s)
{
}
}
class Derived:MyBaseClass,IIfc1
{
}
class Program{
static void Main()
{
Derived d = new Derived();
d.PrintOut("object.");
}
}
显示接口成员实现
单个类可以实现多个接口需要的所有成员。也可以为每一个接口分离实现。这种情况下,可以创建显示接口成员实现。显示接口成员实现有如下特性:
与所有接口实现相似,它被类和结构用来实现接口。
它使用限定接口名称来声明,由接口名称和成员名称以及它们中间的点分隔符好构成。
interface IIfc1{ void PrintOut(string s);}
interface IIfc2{ void PrintOut(string s);}
class MyClass:IIfc1,IIfc2
{
void IIfc1.PrintOut(string s) // 限定接口名称 显示实现
{...}
void IIfc2.PrintOut(string s) // 限定接口名称 显示实现
{...}
}
访问显式接口成员实现
显示接口成员实现只可以通过指向接口的引用来访问。也就是说,其他类的成员都不可以直接访问它们。
class MyClass:IIfc1
{
void IIfc1.PrintOut(string s) //显式接口实现
{
Console.WriteLine("IIfc1");
}
public void Method1()
{
PrintOut("..."); //编译错误
this.PrintOut("..."); //编译错误
((IIfc1)this).PrintOut("..."); //调用方法
}
}
接口可以继承接口
接口本身可以从一个或多个接口继承。
要知道某个接口继承其他接口,应在接口声明中把基接口以逗号分隔的列表形式放在接口名称的冒号之后。
interface IDaoIO:IDataRetrieve,IDataStore
{........}
与类不同,它只在基类列表只能有一个类名,而接口可以在基接口列表中有多个接口。
列表中的接口本身可以有被继承的接口。
结果接口包含它声明的所有接口和所有基接口。
分享到:
相关推荐
根据提供的标题、描述、标签和部分内容,我们可以详细地解析C#中的关键概念和技术要点。以下是对这些知识点的深入探讨: ### C#中的基本概念 #### 常数(Const) 在C#中,常数使用`const`关键字声明。它们是隐式...
《C# 6.0学习笔记:从第一行C#代码到第一个项目设计》是由周家安编著的一本深入浅出的C#编程教程。这本书主要针对C#初学者和有一定基础的开发者,旨在帮助读者全面理解C# 6.0版本的新特性和编程技巧,并通过实际项目...
本学习笔记旨在帮助初学者从零基础开始掌握C#编程,逐步进阶到能够独立设计项目。随书源码为学习提供了实践操作的平台,确保理论与实践相结合。 一、C# 6.0基础语法 1. 变量与数据类型:C#支持多种数据类型,包括...
【标签】"C# 共2——02 课件" 明确指出这是与C#编程相关的学习资料,"共2——02"表示这是一个系列课程的第二个部分,而"课件"则提示这些内容可能包括演示文稿、讲义或其他辅助教学材料。 【压缩包子文件的文件名称...
### C# 学习笔记 —— 第一天的基础知识 #### 输出与输入操作 - **输出**: 在 C# 中,最基本的输出方法是通过 `Console.WriteLine()` 方法。此方法允许你输出一行文本到控制台。其中 `{index}` 表示格式化输出的...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
为实现这一目标,作者研究了免费的类库WinPCap,并决定使用C#重新实现WinPCap的基本接口,命名为`PacketNt.dll`。 #### 2.2 技术要点 - **WinPCap 库**:这是一个开源的网络抓包工具,广泛应用于网络监控和数据分析...
DevExpress 学习笔记(一)——IDXDataErrorInfo 接口 DevExpress 学习笔记(一)——IDXDataErrorInfo 接口中,我们可以学习到 IDXDataErrorInfo 接口的基础知识和应用。IDXDataErrorInfo 接口是 DevExpress 中的...
- **扩展方法**:LINQ的许多操作是通过C#的扩展方法实现的,如`Select`、`Where`、`OrderBy`等,它们使得任何实现了IEnumerable接口的对象都可以进行查询操作。 2. **查询语法** - **查询表达式语法**:以`from`...
C#学习大全的标签表明,这些资料不仅限于ASP.NET 2.0的Web开发,还可能深入到C#语言的细节,例如类、接口、委托、异常处理和多线程编程。在ASP.NET 2.0中,C#作为主要的编程语言,对理解数据操作背后的逻辑和实现至...
这篇文档将深入探讨标题"**C#-Halcon-Python-C++练习文本笔记.zip**"中涉及的四个关键编程语言——C#、Halcon、Python和C++的相关知识点,以及它们在实际应用中的结合和练习。 首先,让我们从C#开始。C#是一种面向...
### C#高级编程《第7版》读书笔记(7-9章)——运算符和类型强制转换 #### 一、C#中的运算符 在C#编程语言中,运算符是一组预定义的符号,用来执行特定的计算任务。根据功能的不同,C#中的运算符大致可以分为以下几...
此外,C#的面向对象特性,如类、继承、接口和抽象类,也是编写高效代码的重要工具。 在多平台游戏开发中,Unity5提供了一站式解决方案。无论是移动设备(iOS、Android)、桌面平台(Windows、Mac、Linux)还是游戏...
在标题"使用C#开发OCX控件.rar_C# OCX_c#开发的.ocx_c#开发的ocx_locationqyb_ocx"中,我们可以看到,这是一个关于C#创建OCX控件的教程,重点涉及了特定的OCX控件——locationqyb_ocx。 首先,我们需要了解OCX控件...
本文档主要聚焦于ArcGIS Engine的开发技巧和关键概念,适用于C#编程环境的学习笔记。以下将逐一详解文档中提到的知识点: 1. **用ArcEngine的工具条添加图层要素**: 在ArcEngine应用中,用户可以通过创建工具条并...
C#学习笔记: C#作为.NET框架的一部分,学习内容涵盖基本语法、控制结构、类与对象、泛型、接口、委托和事件。了解Windows Forms和WPF(Windows Presentation Foundation)用于桌面应用开发,以及Unity引擎中的C#...
### WebService学习笔记 #### WebService的定义与原理 WebService是一种设计用于支持跨网络的机器间相互操作交互的软件系统。根据W3C组织的定义,WebService被看作是一组模块化的API,这些API能够通过网络被调用,...