您的位置:首页 > 编程语言 > C#

C#中的接口

2010-03-24 10:10 155 查看
原文地址:http://www.dingos.cn/index.php?topic=1099.0

★ 接口是纯抽象基类。
★ 接口是一种应用类型仅可以包括抽象成员。
★ 接口中的成员可以是Events, Methods, Properties 和 Indexers。
★ 当接口尽可以包括这些成员的声明。在类中任何任何操作必须被实现。
★ 接口不能包含常量、字段、构造函数、析构函数和静态成员。接口中的所有成员暗含是public。
★ 一个接口允许一个类从几个接口继承而来。
★ Csharp 程序一次只能继承一个类但可以实现几个接口。
★ 接口也可用来定义可由类使用的一组常量。
★ 接口提供“is a”关系。

【接口中的方法】
public interface ISampleInterface{

void ShowName();
}

【接口中的属性】
public interface ISampleInterface{

string Name{ get; set; }
}
注意:接口属性的访问器不具有体。因此,访问器的用途是指示属性是否为读写、只读或只写。

【接口索引器】

索引器可在 interface上声明。接口索引器的访问器与类索引器的访问器具有以下方面的不同:

接口访问器不使用修饰符。

接口访问器没有体。

public interface ISomeInterface {
string this[int index] { get; set; }
}

【示例】接口定义

程序代码:
public interface IFile{
int delFile();
void disFile();
}

public class MyFile : IFile{
public int delFile(){
System.Console.WriteLine("DelFile 实现!");
return 0;
}

public void disFile(){
System.Console.WriteLine("DisFile 实现!");
}
}

class Test{
static void Main(){
MyFile objMyFile = new MyFile();
objMyFile.disFile();
int retValue = objMyFile.delFile();
}
}

类MyFile继承了接口IFile并实现了接口中定义的方法delFile()和disFile()

【示例】
public interface IFile{

int delFile();
void disFile();
}

public class BaseforInterface{
public void open(){
System.Console.WriteLine("这是 BaseforInterface 的 open 方法");
}
}

public class MyFile : BaseforInterface, IFile{
public int delFile(){
System.Console.WriteLine("DelFile 实现!");
return 0;
}

public void disFile(){
System.Console.WriteLine("DisFile 实现!");
}
}

class Test{
static void Main(){
MyFile objMyFile = new MyFile();
objMyFile.disFile();
int retValue = objMyFile.delFile();
objMyFile.open();
}
}
定义一个继承类BaseforInterface和接口Ifile的新类MyFile

【C# 允许多接口实现】
public interface IFile{

int delFile();
void disFile();
}

public interface IFileTwo{
void applySecondInterface();
}

public class BaseforInterface{
public void open(){
System.Console.WriteLine("这是 BaseforInterface 的 open 方法");
}
}

public class MyFile : BaseforInterface, IFile, IFileTwo{
public int delFile(){
System.Console.WriteLine("DelFile 实现!");
return 0;
}
public void disFile(){
System.Console.WriteLine("DisFile 实现!");
}
public void applySecondInterface(){
System.Console.WriteLine("ApplySecondInterface 实现!");
}
}

class Test{
static void Main(){
MyFile objMyFile = new MyFile();
objMyFile.disFile();
int retValue = objMyFile.delFile();
objMyFile.open();
objMyFile.applySecondInterface();
}
}
运行结果:

DisFile 实现!
DelFile 实现!
这是BaseforInterface的open方法
ApplySecondInterfacee实现!

【显示接口实现】

如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。

interface IControl {
void Paint();
}
interface ISurface {
void Paint();
}
class SampleClass : IControl, ISurface {
public void Paint() { } //两个接口的Paint方法都实现
}

如果两个接口成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员 -- 即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。

类成员 IControl.Paint 只能通过 IControl 接口使用,ISurface.Paint 只能通过 ISurface 使用。两个方法实现都是分离的,都不可以直接在类中使用

SampleClass obj = new SampleClass(); obj.Paint(); //编译出错
IControl c = (IControl)obj;
c.Paint(); // 调用实现IControl的Paint方法
ISurface s = (ISurface)obj;
s.Paint(); //调用实现ISurface的Paint方法

【接口继承】
可以通过将多个接口组合到一起来创建新的接口
interface IAllFile : IFile, IFileTwo{
//如果需要,除了 IFile 和 IFileTwo 操作之外,还可以添加更多操作
}

【is操作符为C# .Net 接口】
最后看一个新的C#操作符可以用于被定义类被解释。这是is运算符。看下面的代码段:

if(nodeC is INode)
Console.WriteLine("nodeC is object of INode type");
else
Console.WriteLine("nodeC isn't object of INode type");
在例子中nodeC为创建为ClonableNode类型。当运行程序“if操作符”返回true。这意味着nodeC也是INode类型。

【.NET中的接口使用注意事项】

接口中可以包含字段、属性、方法、索引器等,但是都不能够实现,接口中的方法和属性。
这个特性与抽象类中的抽象方法类似。

定义一个接口的名称通常都是以“I”开头。

习惯的说法是实现了一个接口、继承了一个类。

实现一个接口的语法与继承类似。

如果类已经继承了一个父类,则以“,”分隔父类和接口。

接口在类图中一个圆圈表示该类实现了一个接口。

【接口的典型应用】
1. 接口作为参数:并不是传递了一个抽象的接口,而是传递了实现了接口的对象。
2. 接口作为返回值:实际上就是返回一个实现接口的对象。

接口是一组规范、一种标准,必须实现接口才能实现某种功能。典型的应用就是将接口作为参数时,要传递一个实现接口的对象,另一个就是将接口作为返回值,实际上要返回的也是实现了接口的对象。

【接口小结】
1. 接口是对继承单根性的扩展。在C#中一个子类不可以继承多个父类。但接口可以从某种程度上实现了多重继承功能。在C#中,一个类虽然不能实现多重继承,但一个类可以实现多个接口。通过实现多个接口可以说是变相地实现了类的多重继承。
2. 接口是一种规范和标准:一个类如果实现了一个接口,意味着这个类遵循了某种规范和约定。其他类可以通过这些规范和约定与它通信。
3. 接口屏蔽了实现的细节:接口可以让接口的使用者不必关心接口的实现者是如何实现接口。
4. 接口的使用方便团队协作开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: