接受方法的签名看起来像:
public Font(Font prototype, FontStyle newStyle)
{
...
}
此上下文中的|
运算符(按位或)表示字体应为粗体和斜体。它的工作原理是这样的,因为它FontStyle
是一个enum
装饰有FlagsAttribute
. FontStyle
定义是:
[Flags]
public enum FontStyle
{
Bold = 1,
Italic = 2,
Regular = 0,
Strikeout = 8,
Underline = 4
}
因此,当您说 时FontStyle.Bold | FontStyle.Italic
,它是按位或:
FontStyle.Bold = 1 = 00000001
FontStyle.Italic = 2 = 00000010
========
FontStyle.Bold | FontStyle.Italic = 3 = 00000011
稍后,您可以测试style
参数以查看使用另一个位运算符 ( ) 设置了哪些位&
。例如,如果您想查看上面生成的样式是否为粗体,您可以执行以下操作:
FontStyle myStyle = FontStyle.Bold | FontStyle.Italic;
bool isBold = (myStyle & FontStyle.Bold) == FontStyle.Bold;
例如,类Bold
上的属性使用与上面几乎相同的代码Font
检查是否是您给它的样式的一部分:FontStyle.Bold
public bool Bold
{
get
{
return ((this.Style & FontStyle.Bold) != FontStyle.Regular);
}
}
请注意,从 .NET Framework 4 开始,您可以使用它Enum.HasFlag()
来测试标志的存在。例如,上面的属性定义可以简化为(使用 C# 6 中的一点语法糖):
public bool Bold => this.Style.HasFlag(FontStyle.Bold);