使用C#创建可重用对象(如字体)的最佳方法

时间:2012-08-07 08:33:54

标签: c#

我有一个应用程序,我正在创建用户控件,为此我已经定义了一个类来重用一些看起来像这样的字体:

public sealed class MyFonts
{       
    private static Font Tahoma7Regular = new Font("Tahoma", 7, FontStyle.Regular);
    private static Font Tahoma9Regular = new Font("Tahoma", 9, FontStyle.Regular);
    private static Font Tahoma9Bold = new Font("Tahoma", 9, FontStyle.Bold);       

    public static Font ChannelText = new Font("Tahoma", 12, FontStyle.Bold);       
    public static Font ClockText = Tahoma7Regular;
    public static Font HelpText = Tahoma9Regular;       
    public static Font RollFieldText = Tahoma9Bold;      

}

有没有办法改进它,我在反编译器工具中看到了Brushes类,他们使用了一些我不知道的ThreadData,但为了简单起见,我还可以改进这段代码?

3 个答案:

答案 0 :(得分:0)

在创建这么多对象之前,先分析一下你是否真的需要它?大多数控件都有一个Font属性(具有默认值)。您只需在那里设置值而不是创建新对象。

答案 1 :(得分:0)

ThreadData听起来像某种形式的机制来在线程之间共享数据。

看一下Brushes类:

public static Brush MediumAquamarine { get; }

也许稍微调整你的课程,使其更像上述内容。在我看来,看起来更干净。

答案 2 :(得分:0)

如果您正在构建用户控件,则不应使用静态字段。 usercontrol的主要目标是可重用,因此您不希望对font等属性使用固定值;这些属性将由usercontrol parent设置。

所以你可能要写的是属性(使用Description之类的属性也很有用):

[Category("Appearance"), Description("Gets or sets the text channel font.")]
[Browsable(true)]
public Font ChannelFont { get; set; }

[Category("Appearance"), Description("Gets or sets the text clock font.")]
[Browsable(true)]
public Font ClockFont { get; set; }
...