声明接口
接口声明不包含数据成员。
接口声明只能包含如下类型的静态成员函数:
方法
属性
事件
索引
函数成员的声明不能包含任何实现代码,而在每一个成员声明的主体后必须使用分号。
按照惯例,接口名称必须从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
{........}
与类不同,它只在基类列表只能有一个类名,而接口可以在基接口列表中有多个接口。
列表中的接口本身可以有被继承的接口。
结果接口包含它声明的所有接口和所有基接口。
分享到:
相关推荐
详细介绍了使用Visual Studio 2010 建立第一个Windows Form应用程序的步骤,适用于初学者
C#6.0学习笔记——从第一行C#代码到第一个项目设计书籍配套源码。书籍下载地址:https://download.csdn.net/download/wosingren/10463453 https://download.csdn.net/download/wosingren/10463468
#6.0学习笔记 从第一行C#代码到第一个项目设计周家安著,高清书签
C#6.0学习笔记 从第一行C#代码到第一个项目设计 随书源码
C#程序设计——Windows项目开发 C#程序设计——Windows项目开发
Learning hard C# 学习笔记
在本书最后一章,专门设计了综合实例——“综合实例1: 照片面积计算机器”和“综合实例2: 文件加密与解密工具”,通过这两个综合实例,既可以将前20章的知识融会贯通,又可以抛砖引玉,真正教会读者开发C#应用...
在本书最后一章,专门设计了综合实例——“综合实例1: 照片面积计算机器”和“综合实例2: 文件加密与解密工具”,通过这两个综合实例,既可以将前20章的知识融会贯通,又可以抛砖引玉,真正教会读者开发C#应用...
C#学习笔记C#学习笔记C#学习笔记C#学习笔记C#学习笔记C#学习笔记C#学习笔记C#学习笔记
c#案例————餐饮管理系统
C#学习笔记_20100614.pdf C#学习笔记_20100614.pdf
LearningHard C#学习笔记,学习C#的经典入门教材。 非常适合初学者,希望大家一起努力。
C#,又名Csharp,天朝喜欢叫C井。 C#是一种面向对象的编程语言。在面向对象的程序设计方法中,程序有各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在先沟通那个的class中。 例如,以...
Visual C#学习笔记光盘 简介:本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程...
详细介绍了C#调用C++函数的步骤,经过编译,可以使用
C#操作Word——C#向Word文档中写入文字
c#面向对象——封装