他的代码差不多如下:
1
if
(font.Bold !
=
true
)
2 font = new Font(font, FontStyle.Bold);
3 //........很长,但却很难处理
2 font = new Font(font, FontStyle.Bold);
3 //........很长,但却很难处理
源程序中还有很多对象处理字体对象。我们先不考虑那些代码,但上面的代码就存在很多问题:如果原来font既是加粗的,又是有下划线的,则font.Bold!=true却是成立的。而且这种操作模式对一些功能很难进行,如:如何进行样式的叠加(加粗还要加下划线),如何把已经加粗的字体去掉加粗等等。
看到这些代码时,我忽然想现在新的编程人员,特别是使用.net,java开发企业应用程序的编程人员,很少有人能对位运算的应用很熟悉了,甚至能在实际中想到它的使用。其实字体样式在框架是定义成位枚举的[flag],意味着它可以使用位运算符来进行操作。
下面是加粗的实现,它自动改变字体的加粗情况,还保留字体的原来其它样式:
1
FontStyle fs
=
font.Style;
2 fs ^= FontStyle.Bold;
3 font = new Font(fs);
如果只是判断当前字体是否是加粗,而不考虑是否有了其它样式设置,可以使用&运算,然后再与FontStyle.Bold相等比较。如下:
2 fs ^= FontStyle.Bold;
3 font = new Font(fs);
1
if
(font.Style
&
FontStyle.Bold
==
FontStyle.Bold)
2 // 字体是加粗的
3 else
4 // 字体不是加粗的
2 // 字体是加粗的
3 else
4 // 字体不是加粗的
这些都是位操作的基本技巧,但却被很多人遗忘了!