接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的,如下面的示例所示:复制 interface ISampleInterface { void SampleMethod(); }class ImplementationClass : ISampleInterface { // Explicit interface member implementation: void ISampleInterface.SampleMethod() { // Method implementation. } static void Main() { // Declare an interface instance. ISampleInterface obj = new ImplementationClass(); // Call the member. obj.SampleMethod(); } } 备注 --------------------------------------------------------------------------------接口可以是命名空间或类的成员,并且可以包含下列成员的签名: •方法•属性•索引器•事件一个接口可从一个或多个基接口继承。当基类型列表包含基类和接口时,基类必须是列表中的第一项。实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问,例如:有关显式接口实现的更多详细信息和代码示例,请参见显式接口实现(C# 编程指南)。示例 --------------------------------------------------------------------------------下面的示例演示了接口实现。在此例中,接口 IPoint 包含属性声明,后者负责设置和获取字段的值。Point 类包含属性实现。复制// keyword_interface_2.cs // Interface implementation using System; interface IPoint { // Property signatures: int x { get; set; } int y { get; set; } }class Point : IPoint { // Fields: private int _x; private int _y; // Constructor: public Point(int x, int y) { _x = x; _y = y; } // Property implementation: public int x { get { return _x; } set { _x = value; } } public int y { get { return _y; } set { _y = value; } } }class MainClass { static void PrintPoint(IPoint p) { Console.WriteLine("x={0}, y={1}", p.x, p.y); } static void Main() { Point p = new Point(2, 3); Console.Write("My Point: "); PrintPoint(p); } } 输出 My Point: x=2, y=3 http://msdn.microsoft.com/zh-cn/library/87d83y5b(VS.80).aspx
与“定义(definition)”相对于的是“声明(declaration)”。这组概念是从C语言时代就有的,要区别其实也很简单,就是看变量有没有分配内存,声明是不分配任何内存的,而定义是要给变量分配内存的(google for more details)。 在C#中,接口是用来提供一组其实现类必须实现的方法、属性等,它没有包含任何实现,所以也就不需要分配任何内存,任何成员的内存分配都是在其实现类中完成,这就是“接口成员类型定义是禁止的”的原因。
接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的,如下面的示例所示:复制
interface ISampleInterface
{
void SampleMethod();
}class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation:
void ISampleInterface.SampleMethod()
{
// Method implementation.
} static void Main()
{
// Declare an interface instance.
ISampleInterface obj = new ImplementationClass(); // Call the member.
obj.SampleMethod();
}
}
备注
--------------------------------------------------------------------------------接口可以是命名空间或类的成员,并且可以包含下列成员的签名: •方法•属性•索引器•事件一个接口可从一个或多个基接口继承。当基类型列表包含基类和接口时,基类必须是列表中的第一项。实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问,例如:有关显式接口实现的更多详细信息和代码示例,请参见显式接口实现(C# 编程指南)。示例
--------------------------------------------------------------------------------下面的示例演示了接口实现。在此例中,接口 IPoint 包含属性声明,后者负责设置和获取字段的值。Point 类包含属性实现。复制// keyword_interface_2.cs
// Interface implementation
using System;
interface IPoint
{
// Property signatures:
int x
{
get;
set;
} int y
{
get;
set;
}
}class Point : IPoint
{
// Fields:
private int _x;
private int _y; // Constructor:
public Point(int x, int y)
{
_x = x;
_y = y;
} // Property implementation:
public int x
{
get
{
return _x;
} set
{
_x = value;
}
} public int y
{
get
{
return _y;
}
set
{
_y = value;
}
}
}class MainClass
{
static void PrintPoint(IPoint p)
{
Console.WriteLine("x={0}, y={1}", p.x, p.y);
} static void Main()
{
Point p = new Point(2, 3);
Console.Write("My Point: ");
PrintPoint(p);
}
}
输出
My Point: x=2, y=3
http://msdn.microsoft.com/zh-cn/library/87d83y5b(VS.80).aspx
在C#中,接口是用来提供一组其实现类必须实现的方法、属性等,它没有包含任何实现,所以也就不需要分配任何内存,任何成员的内存分配都是在其实现类中完成,这就是“接口成员类型定义是禁止的”的原因。