日期:2014-05-19  浏览次数:21020 次

谁知道给高分
Brush   oldOne   =   new   LinearGradientBrush(new   Rectangle(0,0,10,10),Color.Black,Color.White,LinearGradientMode.Horizontal);
Brush   newOne   =   (Brush)oldOne.Clone();
LinearGradientBrush   lb   =   newOne   as   LinearGradientBrush;
这时候   lb   对象中的属性将无法获得/写入值,操作则抛出异常。
为什么,谁能解释一下,高分回赠。

------解决方案--------------------
LinearGradientBrush oldOne = new LinearGradientBrush(new Rectangle(0,0,10,10),Color.Black,Color.White,LinearGradientMode.Horizontal);

LinearGradientBrush lb = oldOne ;

这样不就行了嘛。。。

你上面的:
Brush newOne = (Brush)oldOne.Clone(); //通过强制转换已经成为Brush类对象了

Brush是LinearGradientBrush 的基类

LinearGradientBrush lb = newOne as LinearGradientBrush; //把基类转换为派生类当然行不通了


------解决方案--------------------
Brush newOne = (Brush)oldOne.Clone();
这里还有问题。
这里先将oldOne转化为Brush类型,然后调用了Brush类型的Clone.所以结果是一个Brush类型(Clone是Brush的Clone,而不是OldOne的Clone)。新产生的对象是Brush类型,而不是转换成Brush类型的LinearGradientBrush类型。
所以代码应该这样修改:
Brush newOne = (Brush)(oldOne.Clone());