引自:http://www.cnblogs.com/sifang2004/archive/2006/07/14/450565.html
接口的描述:
1.一个接口定义了一个契约。
2.接口可以包容方法、C#属性、事件、以及索引器。
3.在一个接口声明中,我们可以声明零个或者多个成员。
4.所有接口成员的默认访问类型都是public。
5.如果在接口成员声明中包括了任何修饰符,那么会产生一个编译器错误。
6.与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。
接口的成员为什么没有委托?
我们都知道C#的接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础,如果对委托和事件不是特别清楚的程序员就一定不会明白,为什么C#接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型,delegate关键字引入的是一个新的类型,所以一个C#接口无法包容一个委托并把它当作成员;而event关键字引入的是一个新的成员,因此事件可以归人接口。理解这点,我们要从C#接口的使命说起,C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。很简单,例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员”这个接口,那么“某某党员”肯定也要“为人民服务”,至于你“某某党员”是否必须拥用“电脑”、“小孩”。那么“党员”这个接口中肯定不会有规定。这也就是接口的目的,规范了实现者的一些行为。所以C#接口的成员都是方法,不会有其它了。稍有c#常识的程序员都明白,c#中的属性,其实就是两个方法,一个Set方法,一个Get方法,同样事件和索引器也都是方法,请看下面的接口:
public interface IDrawingObject
{
event EventHandler OnDraw;
string Name
{
get;
set;
}
int this[int index]
{
get;
set;
}
void SetValue();
}
该接口包含了c#接口所能接纳的所有成员,事件,属性,索引器,方法.
用MSIL Disassembler工具查看一下:
属性Name对应于Get_Name(),Set_Name()这两个方法,事件OnDraw对应于add_OnDraw(),remove_OnDraw()这两个方法,索引器对应于get_Item(),set_Item()这两个方法。
在看下面的委托和类的定义:
public delegate void TestEventDelegate(object sender, System.EventArgs e);
class TestClass
{
public void SetValue()
{ }
}
定义一个委托和定义一个类是没有什么区别的,都是定义了个新的类型。所以C#接口是不能有委托的,除非微软告诉我们C#接口中是可以定义类的。
分享到:
相关推荐
面向对象的运作主要体现在多态性上,多态允许子类重写父类的方法,或者实现接口中声明的方法。在C#中,多态通过虚方法和接口实现。当一个类实现了一个接口,它必须提供该接口所有成员的实现,这确保了所有实现了同一...
在这个"**c#接口调用案例**"中,我们将探讨如何创建接口,实现接口,并在实际应用中调用接口方法。 首先,接口通过`interface`关键字声明,它只包含方法签名、属性和事件,而不包含任何实现细节。例如: ```csharp...
类或结构体可以通过`:`后跟接口名来实现接口,然后提供接口中所有成员的实现。例如: ```csharp class MyClass : IFoo { public void Bar() { Console.WriteLine("Bar method called."); } public int Baz...
在本教程中,我们将深入探讨C#中接口(Interface)的概念,以及如何在VS2010环境下实现接口实例。 接口在C#中扮演着关键角色,它是一种完全抽象的类型,定义了一组方法签名,但不包含任何实现。这使得接口成为不同...
`ICombinedInterface`继承了`IMyInterface`和`ISecondInterface`,这意味着实现`ICombinedInterface`的类必须同时实现这三个接口中的所有方法。 此外,C#从版本8.0开始支持默认接口实现,允许接口在某种程度上提供...
总结来说,C#接口是一种重要的编程构造,它定义了一组方法、属性、事件和索引器的协议,类或结构通过实现接口来承诺实现这些成员。接口支持多重继承和多重实现,这增强了编程的灵活性和复用性。接口作为组件技术的一...
C#中接口的定义以及使用,C#中接口的定义以及使用。
在本示例中,我们将关注的是"C# HTTP接口设计及调用demo",这通常涉及到如何创建一个HTTP服务端接口,以及如何使用C#客户端进行调用。HTTP接口在分布式系统中扮演着重要角色,它允许不同组件之间通过HTTP协议交换...
在C#中,我们通过创建一个继承自`System.Web.IHttpHandler`接口的类来定义我们的ASHX处理器。这个类通常包含两个方法:`IsReusable`和`ProcessRequest`。`IsReusable`用于判断处理器实例是否可重用,而`...
本案例中的"C#接口案例.zip"文件很可能是包含了一系列示例代码,展示了如何在C#中使用接口来设计灵活、可扩展的系统。 接口在C#中的主要特点包括: 1. **完全抽象**:接口中所有的成员默认都是public抽象方法,不...
C#调用API接口 本文将详细介绍如何在C#中调用API函数获取系统信息。API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法...
接口成员声明不能包含访问修饰符、`abstract`、`virtual`、`override`、`static`等修饰符,因为接口中的所有成员默认都是抽象的(abstract)和虚拟的(virtual)。 类和结构可以通过`:`运算符实现一个或多个接口,...
大话c# 的接口 很多人问我c#中接口的含义是什么,怎么运用。这个是初学者经常迷惑的事情。于是我整理自己的接口的理解运用比较通俗的话来说说, 如不清楚到 这里看看 ...
在C#中,通常我们隐式实现接口,即不指定接口名,只需在类中定义接口中声明的成员。然而,显式实现接口时,类的成员会使用接口名称作为前缀,语法如下: ```csharp class MyClass : IMyInterface { void ...
3. **C#调用Java接口**:在C#代码中,你可以像使用普通的.NET接口一样使用转换后的Java接口。例如: ```csharp using MyJavaInterface = MyJavaLibrary.MyJavaInterface; public class CSharpConsumer { private ...
本压缩包文件“C#接口的使用.zip”很可能包含了若干示例代码,用于演示如何在C#项目中有效地使用接口。 1. **接口的定义**: 接口使用`interface`关键字来声明,其内部可以包含方法、属性、索引器和事件的签名。...
本示例将重点关注"C#接口对接",特别是通过Web Service实现的接口访问。C#是Microsoft开发的一种面向对象的编程语言,广泛用于构建Windows桌面应用、Web应用以及.NET框架下的服务。 **接口对接的概念** 接口对接是...
1. **隔离接口实现**:由于显式实现的接口成员不能通过类实例访问,可以将接口的实现部分从公共接口中分离出来,使得类的使用者不会直接接触到这些实现细节。 2. **解决命名冲突**:如果不同接口中有同名成员,显式...
《C#定时调用接口小工具的深度解析》 C#作为.NET框架的主要编程语言,以其强大的功能和易用性深受开发者的喜爱。本篇文章将深入探讨标题为"C#定时调用接口小工具"的项目,它是一个基于C#编写的Winform应用程序,...
本文将深入探讨如何在C#中利用.NET库进行JSON接口的读取操作,并结合提供的示例代码进行实践。 首先,我们要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于...