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