//接口 // 接口与抽象类有些相似,因为它们都提供了用来创建新类的模板.它们之间的不同在于接口不提供任何实现的 //类成员,而抽象类可以实现派生类共用的成员. // 比起类而言,接口更像类型.当您在一个类中实现某个特定的接口时,这个类的实例可以用于被声明为该接口的 //参数或变量. //例如下面的代码为前面创建的Shape对象声明了一个接口.using System;namespace FlashCards{ public interface IFigure { float Top { get; set; } float Left { get; set; } float Area(); float Perimeter(); } /**//// <summary> /// 使用这个接口前,需要在下面的类中实现它 /// </summary> public abstract class Shape:IFigure { public Shape() { // // TODO: 在此处添加构造函数逻辑 // } IFigure 成员#region IFigure 成员 public abstract float Top { get; set; } public abstract float Left { get; set; } public abstract float Area(); public abstract float Perimeter(); #endregion }//覆盖抽象类成员的每一个成员定义都需要 Overrides(vb.net) 或 override(c#) 关键字. public class CirCle:Shape { float fxCenter,fyCenter,fRadius; public CirCle() { fxCenter=0; fyCenter=0; fRadius=0; } public override float Top { get{return fxCenter-fRadius;} //fx set{fxCenter=value+fRadius;} } public override float Left { get{return fyCenter-fRadius;} //fy set{fyCenter=value+fRadius;} } public override float Area() { return (float)(2*System.Math.PI *Math.Pow((double)fRadius,2 )); } public override float Perimeter() { return 2*fRadius*(float)System.Math.PI; } public float Radius { get{return fRadius;} set{fRadius=value;} } public virtual void Center(float x,float y) { fxCenter=x; fyCenter=y; } } public class Sphere:CirCle //球体,圆 { float fCenter; public Sphere() { fCenter=0; } public override float Area() { return (float)(4*Math.PI *Math.Pow((double)base.Radius ,2) ); //圆的面积 } public new void Center(float x,float y) { this.Center (x,y,0); } public void Center(float x,float y,float z) { base.Center(x,y) ; fCenter=z; } public float Volume() //体积 { return (float)((4/3)*System.Math.PI*Math.Pow((double)base.Radius,3)); } public float Front { get{return fCenter-base.Radius ;} set{fCenter=value+base.Radius ;} } }}// 这个示例中的Shape抽象类实现了IFigure接口,所有从Shape派生而来的类都继承了实现的IFigure. //这就是说,类型CirCle和Sphere的对象是从Shape派生而来,它们能被用作IFigure类型的参数. // 这里的关键是接口中定义的所有项必定存在于实现该接口的类中 .如果您省略了某个成员,Visual Studio //将产生一个编译时错误. private void Button4_Click(object sender, System.EventArgs e) { //创建一个圆 CirCle myCircle=new CirCle(); myCircle.Radius =2; myCircle.Center(10,2); //创建一个球体 Sphere mySphere=new Sphere(); mySphere.Radius =10; mySphere.Center(10,20,25) ; //显示每一种形状的相关信息 ShowShapeInfo(mySphere); ShowShapeInfo(myCircle); } private void ShowShapeInfo(IFigure Shape) { //因为Shape参数是IFigure,我们知道它有这些成员 Response.Write("Shape Top :"+Shape.Top +"<br>" ) ; Response.Write(" Left :"+Shape.Left +"<br>" ) ; Response.Write(" Area : "+Shape.Area()+ "<br>" ) ; Response.Write(" perimeter : "+Shape.Perimeter() +"<br>" ) ; } }//输出Shape Top :0Left :10Area : 1256.637perimeter : 62.83186Shape Top :8Left :0Area : 25.13274perimeter : 12.56637