C#继承的对象问题?

C#中Brushb=newSolidBrush(Color.Green);这个b刷子的引用是Brush,对象是SolidBrush,那么在画椭圆的形状的时候用到的b这个参... C#中Brush b = new SolidBrush(Color.Green);这个b刷子的引用是Brush,对象是SolidBrush,那么在画椭圆的形状的时候用到的b这个参数为什么可以直接使用,不用把这个b转换一下类型.根据以前学习的知识是b还是Brush的对象,不是SolidBrush的对象.还有就是Graphics里面为什么有dispose()方法,不是有GC吗? 展开
 我来答
fujie724
2013-09-29 · TA获得超过1187个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:276万
展开全部

1、

Brush是基类。SolidBrush是继承于Brush的子类。

同样继承于Brush的笔刷子类还有:TextureBrush、LinearGradientBrush 等等。


由于有这么多种子类的存在,如果按照传统的方法,则Graphic里每个方法都要写很多个形式。

比如:

Graphic.FillRectangle(SolidBrush brush,Rectangle rect);
Graphic.FillRectangle(TextureBrush brush,Rectangle rect);
Graphic.FillRectangle(LinearGradientBrush brush,Rectangle rect);
....

这样一来,函数的形式太多了,学习使用和维护都会增加难度。所以,为了方便使用

就可以把他们全部归结成一个,只需要把参数定义成他们的基类,则不管何种Brush都可以传递进来。

Graphic.FillRectangle(Brush brush,Rectangle rect);

以上的函数,不管是怎样的Brush子类传递进来都可以正常功能。

是不是方便很多呢?


2、

在.net里,大部分托管的代码里的类对象(非结构体的对象)。都有dispose()方法。

比如一个窗体Form,或者是一个数据集合DataTable,都会发现有dispose()方法。

因为他们都实现了IDisposable接口。

简单的说,实现这个接口,就是要告诉.net这个对象要如何销毁,当.net回收垃圾的时候,会自动调用这个函数。

如果认为.net自动调用的时机不符合自己的要求,也可以自己主动调用这个函数。

只不过调用了之后,.net的垃圾管理机制也不会第一时间销毁掉这个对象,而只是做了一个需要回收的记号。可以在下面写上 GC.Collect()来强行回收。


明白了吗?

追问
还有就是FontStyle.Bold&FontStyle.Regular和FontStyle.Bold | FontStyle.Regular之间的区别是什么啊?
追答
你好。
在FontStyle中一共有以下几种样式,他们的值分别是:
(普通)Regular = 0
(加粗)Bold = 1
(斜体)Italic = 2
(下划线)Underline = 4
(删除线)Strikeout = 8
则,转换成二进制来表示的话就是:

Regular 0000
Bold 0001
Italic 0010
Underline 0100
Strikeout 1000

而 & 和 | 是位运算的运算符,分别是 与运算 和 或运算。
1、与运算:相同位的两个数字都为1,则结果为1;若有一个不为1,则结果为0。
2、或运算:相同位只要一个为1,结果即为1。

所以。
FontStyle.Bold & FontStyle.Regular 的实质其实是把0000和0001的每一位二进制位,单独进行与运算,所以最后的结果仍为0000。
也就是说 FontStyle.Bold & FontStyle.Regular = FontStyle.Regular

  0000
与 0001
--------------
  0000

所以,FontStyle.Bold & FontStyle.Regular 最后赋值到Font里仍然是普通字体,不会加黑。字体样式没有变化。

--------------------------------------------------------------------------------------------------------------

而FontStyle.Bold | FontStyle.Regular 却不一样。将这两个值每一位二进制做或运算。

  0000
或 0001
--------------
  0001

最后的结果为0001。
也就是说 FontStyle.Bold & FontStyle.Regular = FontStyle.Bold

将Font样式设为 FontStyle.Bold | FontStyle.Regular 后。字体会出现黑体的效果。
取券啦
2013-09-29 · TA获得超过107个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:155万
展开全部
画图的时候,就是需要brush对象啊。solidbrush算是继承与brush,拥有brush的所有功能和属性,所以,可以直接使用。

dispose()是手动卸载资源。GC的作用是自动卸载。但是GC的判断要求是确定不需要了,但有不少情况下,GC也很难判断确定资源的需要和不需要。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mlz13
2013-09-29
知道答主
回答量:50
采纳率:0%
帮助的人:16.9万
展开全部
SolidBrush是单色刷,Brush是填充形状,两回事
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式