DotNet编程-星光伴我行

滴滴真谛 水滴石穿

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
//接口
    
//    接口与抽象类有些相似,因为它们都提供了用来创建新类的模板.它们之间的不同在于接口不提供任何实现的
    
//类成员,而抽象类可以实现派生类共用的成员.
    
//    比起类而言,接口更像类型.当您在一个类中实现某个特定的接口时,这个类的实例可以用于被声明为该接口的
    
//参数或变量.
    
//例如下面的代码为前面创建的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 成员
    }


//覆盖抽象类成员的每一个成员定义都需要 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 :0
Left :10
Area : 1256.637
perimeter : 62.83186
Shape Top :8
Left :0
Area : 25.13274
perimeter : 12.56637
posted on 2006-01-16 17:44  DotNet编程  阅读(485)  评论(0编辑  收藏  举报