C# 多态性的深入理解
程序员文章站
2023-12-19 18:42:16
msdn 上面的定义:通过继承,一个类可以有多种类型:可以用作它自己的类型,任何基类型,或者在实现接口时用作任何接口的类型。从两个方面来说明多态1.在运行时,方法参数和集合...
msdn 上面的定义:通过继承,一个类可以有多种类型:可以用作它自己的类型,任何基类型,或者在实现接口时用作任何接口的类型。
从两个方面来说明多态
1.在运行时,方法参数和集合或者是数组等位置,派生类的对象都可以作为基类的对象处理,发生此情况时,该对象的声明类型不再与运行时类型相同。
2.基类定义实现虚方法,派生类重写这些方法,在运行时,clr会查找运行时类型,并且调用派生类重写的方法.
class shape
{
public virtual void draw()
{
console.writeline("draw a shape");
}
}
class circle : shape
{
public override void draw()
{
console.writeline("draw a circle");
}
}
class rectangle : shape
{
public override void draw()
{
console.writeline("draw a rectangle");
}
}
class triangle : shape
{
public override void draw()
{
console.writeline("draw a triangle");
}
}
class programm
{
static void main()
{
//此次就说明了,派生类对象可以作为基类对象进行处理
shape[] shapes =
{
new circle(),
new rectangle(),
new triangle()
};
foreach (shape s in shapes)
{
//调用draw()方法的时候,调用了派生重写的方法,而不是基类
s.draw();
}
}
}
从两个方面来说明多态
1.在运行时,方法参数和集合或者是数组等位置,派生类的对象都可以作为基类的对象处理,发生此情况时,该对象的声明类型不再与运行时类型相同。
2.基类定义实现虚方法,派生类重写这些方法,在运行时,clr会查找运行时类型,并且调用派生类重写的方法.
复制代码 代码如下:
class shape
{
public virtual void draw()
{
console.writeline("draw a shape");
}
}
class circle : shape
{
public override void draw()
{
console.writeline("draw a circle");
}
}
class rectangle : shape
{
public override void draw()
{
console.writeline("draw a rectangle");
}
}
class triangle : shape
{
public override void draw()
{
console.writeline("draw a triangle");
}
}
class programm
{
static void main()
{
//此次就说明了,派生类对象可以作为基类对象进行处理
shape[] shapes =
{
new circle(),
new rectangle(),
new triangle()
};
foreach (shape s in shapes)
{
//调用draw()方法的时候,调用了派生重写的方法,而不是基类
s.draw();
}
}
}