Effective C# 原则28:避免转换操作
2009-02-19 08:16:17 来源:WEB开发网(图3.1)
(译注:这一原则中作者所给出的例子不是很恰当,而且作者也在前面假设了原因,因此请读者不要对这个例子太钻牛角尖,理解作者所在表达的思想就行了,相信在你的C#开发中可能也会遇到类似的转换问题,只是不太可能从圆形转椭圆。)
这将导致你要添加两个转换操作。因为每一个圆形都是一个椭圆,所以要添加隐式转换从一个圆形转换到新的椭圆。隐式转换会在一个类要求转化为另一个类时被调用。对应的,显示转化就是程序员在代码中使用了强制转换操作符。
public class Circle : Shape
{
private PointF _center;
private float _radius;
public Circle() :
this ( PointF.Empty, 0 )
{
}
public Circle( PointF c, float r )
{
_center = c;
_radius = r;
}
public override void Draw()
{
//...
}
static public implicit operator Ellipse( Circle c )
{
return new Ellipse( c._center, c._center,
c._radius, c._radius );
}
}
现在你就已经实现了隐式的转换操作,你可以在任何要求椭圆的地方使用圆形。而且这个转换是自动完成的:
public double ComputeArea( Ellipse e )
{
// return the area of the ellipse.
}
// call it:
Circle c = new Circle( new PointF( 3.0f, 0 ), 5.0f );
ComputeArea( c );
我只是想用这个例子表达可替代类型:一个圆形已经可以代替一个可椭圆了。ComputeArea函数可以在替代类型上工作。你很幸运,但看下面这个例子:
- ››避免在代码中直接任意使用ConfigurationManager.A...
- ››避免推广中出现负面信息的6个有效方法
- ››避免地方门户网站运营转型过程中的管理误区
- ››避免刷新页面,自动跳回到页面顶部的办法
- ››避免重复代码——know your library
- ››避免重复代码——know your library(续)
- ››避免遭受攻击 七个技巧保护服务器安全
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
更多精彩
赞助商链接