Частные шрифты и кисти злые? - PullRequest
2 голосов
/ 23 декабря 2010

У меня есть несколько классов, в которых шрифты и кисти являются частными полями.Что-то говорит мне, что это неправильная практика, и ее следует избегать, но я не знаю почему .... (Черт, подсознание :-))

Это правда, и почему это плохая практика?

class SomeControl: Panel
{
    private Font titelFont = new Font("Arial", 8.25f, FontStyle.Bold);        
    private SolidBrush whiteBrush = new SolidBrush(Color.White);


    public SomeControl()
    {
        //Do stuff
    }
}

Ответы [ 4 ]

5 голосов
/ 23 декабря 2010

Для меня это нормально выглядит.

Но вы должны либо сделать их статическими, либо переопределить метод Dispose в SomeControl и располагать titelFont и whiteBrush там.

Также сложно настроить шрифты и кисти в конструкторе, если вы не сделаете их общедоступными свойствами.

5 голосов
/ 23 декабря 2010

Не понимаю, почему это плохо.

При использовании кистей у вас уже есть статический Brushes класс , который вы можете использовать повторно вместо создания своего собственного (точно так же, как вы делаете с обычными цветами).

Например, вместо создания whiteBrush, вы можете использовать Brushes.White напрямую.

Конечно, он дает вам только общий набор кистей, поэтому вам все равно нужно создать собственную кисть для любого другого цвета.

Только помните, что шрифты и кисти должны быть правильно расположены . Это означает, что при использовании ваших собственных шрифтов и кистей в качестве свойства или поля класса этот класс должен реализовывать IDisposable и правильно располагать эти шрифты и кисти.

3 голосов
/ 23 декабря 2010

Хитрость заключается в том, чтобы убедиться, что они утилизируются ...

Но (чтобы сделать это сложнее), только если они не встроенные системные кисти и т. Д. - так как они на самом деле не принадлежат вашемуform.

Если они расположены в Dispose (), то это нормально.В противном случае он может медленно вытекать из ручек.GC может поймать их, но это не является детерминированным.

0 голосов
/ 23 декабря 2010

Если вы хотите изменить шрифт или цвет кисти извне, вы должны сделать его публичным, а не просто сделать его приватным.

Не забудьте утилизировать кисть с помощью регулятора. Лично я только устанавливаю цвет кисти и создаю саму кисть на краске.

private Color _WhiteBrush = Color.White;
public Color WhiteBrush
{
  get
  {
     return _WhiteBrush;
  }
  set
  {
    _WhiteBrush = value;
    this.Invalidate();
  }
}

protected override void OnPaint(PaintEventArgs e)
{
  using (SolidBrush sb = new SolidBrush(this.WhiteBrush))
  {
    e.Graphics.FillRectangle(sb, this.ClientRectangle);
  }
}
...