Grisson's .net

源码之前,了无秘密

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
C#提供了完整的面向对象的概念,包括抽象类,接口,重载或覆盖等
 
访问
对于类和他们的成员有5个级别的访问:public,protected,internal,protected internal和private
 
public:       所有类和项目中的所有成员都可以访问
private:     只能用于当前类
internal:   当前项目中的所有成员可以访问。
protected:当前类和派生类中的成员可以访问。只能用于成员定义,不能用于类的定义
protected internal:当前类中和当前项目中的派生类中的所有成员可以访问。只用在成员定义。
 
 
继承
类可以集成基类的成员,并能覆盖或重载继承类的成员
 
抽象
是为派生类定义的接口的一个类,不能从派生类中创建一个对象,只能利用他来派生一个新的类,abstract成员只是定义,没有过程体语句。覆盖抽象类成员的每一个成员定义都需要orverride关键字。
 
接口与抽象类的不同之处在于接口提供任何实现的类成员,而抽象类可以实现派生类公用的成员。
 
 
 
new:声明派生类中的某个成员隐藏了基类中相同名字的成员
virtual:声明基类的某个成员在派生类中能被覆盖
override:声明派生类的某个成员覆盖了基类中同名的成员
abstract(用于类):声明某个类为派生类提供模板。其本身不能被实例化
abstract(用于方法):声明一个类的某个成员为派生类提供了模板。不能被调用
base:从派生类中调用一个基类的成员
 
注意:不能从一个web窗体中派生另一个web窗体。尽管.net中web窗体被定义为类。
 
  派生类用同样的签名定义一个成员,这个派生成员就会覆盖基类成员。
  如果派生类用同样的名称定义了一个成员,但是定义与基类成员不同的参数列表,派生成员将会重载该基类成员。如果只是返回类型不同,则是隐蔽基类成员。
e.g.
public class circle
{
  float fxCenter,fyCenter,fRadius;
 
  public Circle()
  {
  }
  public float Top
  {
    get
    {
      return fxCenter-fRadius;
    }
 
    set
    {
      fxCenter=value + fRadius;
    }
  }//the end of Top
 
  public float Left
  {
     get
     {
       return fyCenter-fRadius;
     }
 
     set
     {
        fyCenter=value+fRadius;
     }
  }
 
  public float Radius
  {
     get
     {
        return fRadius;
     }
  
     set
     {
        fRadius=value;
     }
  }
 
  public virtual float Area()
  {
     return (float)(System.Math.PI * Math.Pow((double)fRadius,2));
  }
 
  public float Perimeter()
  {
     return 2 * fRadius * (float)System.Math.PI;
  }
 
  public virtual void Center(float X,float y)
  {
     fxCenter = x;
     fyCenter = y;
  }
}//the end of class circle
 
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=2;
  }
}

文章来源:http://spaces.msn.com/members/Grisson/Blog/cns!1pdzVqmOhs8O_w1Y7GbtnyFQ!208.entry
posted on 2005-08-12 10:53  海盗  阅读(261)  评论(0编辑  收藏  举报