用C#中方法的重载,求圆面积、长方形面积、三角形面积.
用C#中方法的重载,求圆面积、长方形面积、三角形面积.
的思路去设计程序:
1,定义一个抽象类或者接口,表示图形,其中包含2个方法:求面积和求周长
2,定义具体类实现这个接口或继承这个抽象类,实现其中定义的函数.
3,调用的时候,定义这个接口类型或抽象类对象,然后根据实例化的不同子类,来调用不同的方法,——即类的多态性.
比如,我下面用接口来实现:
interface IDraw
{
float Area();
float Round();
}
class Square :IDraw
{
private float _x;
public Square(float x)
public float Area()
public float Round()
}
class Rectangle :IDraw
{
private float _x,_y;
public Rectangle(float x,float y)
public float Area()
public float Round()
}
class Triangle :IDraw
{
// 类似上面的定义
}
void Main()
{
IDraw draw;
draw = new Square(5);
draw.Area(); // 计算正方形面积
draw = new Rectangle(5,10);
draw.Area(); // 计算长方形面积
draw = new Triangle(5,10);
draw.Area(); // 计算三角形面积
}
多态性的好处很明显,方便以后扩充功能,且不影响原有的功能,你再加入椭圆形,菱形等,都只要定义新的类实现IDraw即可.
在调用方也实现了统一的接口,不管什么图形,都是用Area()和Round()去算面积和周长.
另外,如果再进一步考虑增强调用方的可维护性,可以使用设计模式IOC/DI,也就是控制反转/依赖注入,在配置文件中配置当前需要实例化的类,然后使用反射加载对应的类,实例化对象,并调用其方法.
关于涉及模式DI,请参考martin.fowler的文章