WEB开发网
开发学院软件开发C语言 Effective C# 原则28:避免转换操作 阅读

Effective C# 原则28:避免转换操作

 2009-02-19 08:16:17 来源:WEB开发网   
核心提示: (图3.1)(译注:这一原则中作者所给出的例子不是很恰当,而且作者也在前面假设了原因,Effective C# 原则28:避免转换操作(2),因此请读者不要对这个例子太钻牛角尖,理解作者所在表达的思想就行了,而且这个转换是自动完成的:public double ComputeArea( E

(图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函数可以在替代类型上工作。你很幸运,但看下面这个例子:

Tags:Effective 原则 避免

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接