none
Переопределение значения по умолчанию для свойства компонента RRS feed

  • Вопрос

  • Здравствуйте.

    Создаю собственный компонент путем наследования существующего. У существующего объявлены некоторые свойства, которые не являются виртуальными, и для них (через атрибут [DefaultValue]) заданы значения по умолчанию. Можно ли в новом классе переопределить эти значения?

    Спасибо.

    7 октября 2011 г. 8:27

Ответы

  • Для студийного дизайнера - нет.


    Почему нельзя? Можно:

        public class MyGreenControl : Control
        {
            [DefaultValue(typeof(Color), "Green")]
            public override Color BackColor
            {
                get
                {
                    return base.BackColor;
                }
                set
                {
                    base.BackColor = value;
                }
            }
    
            public MyGreenControl()
            {
                BackColor = Color.Green;
            }
        }
    

    • Помечено в качестве ответа Abolmasov Dmitry 10 октября 2011 г. 4:52
    8 октября 2011 г. 7:29
    Отвечающий

Все ответы

  • DefaultValue аттрибут только указывает на дефолтное значение. Задается оно в конструкторе. Просто выставляйте нужное значение в конструкторе (хотя лучше проверить, что инициализация этих полей не происходит в другом месте). Правда в дизайнере студии вам все равно дефолтным значением будет указываться то, которое прописано в этом аттрибуте.
    7 октября 2011 г. 9:02
    Отвечающий
  • Правда в дизайнере студии вам все равно дефолтным значением будет указываться то, которое прописано в этом аттрибуте.
    Так всё же, можно его переопределить в дочернем классе или нет?
    7 октября 2011 г. 9:37
  • Для студийного дизайнера - нет.
    7 октября 2011 г. 10:58
    Отвечающий
  • Для студийного дизайнера - нет.


    Почему нельзя? Можно:

        public class MyGreenControl : Control
        {
            [DefaultValue(typeof(Color), "Green")]
            public override Color BackColor
            {
                get
                {
                    return base.BackColor;
                }
                set
                {
                    base.BackColor = value;
                }
            }
    
            public MyGreenControl()
            {
                BackColor = Color.Green;
            }
        }
    

    • Помечено в качестве ответа Abolmasov Dmitry 10 октября 2011 г. 4:52
    8 октября 2011 г. 7:29
    Отвечающий
  • Для WPF такое не работает. Наверно автору стоит уточнить какой технологией он пользуется.
    10 октября 2011 г. 7:51
    Отвечающий
  • Я так понимаю, что если свойство не является виртуальным (о чем указано в первом сообщении), то вместо
     public override Color BackColor
    
    надо писать
     public new Color BackColor
    

    10 октября 2011 г. 8:00
  • Для WPF такое не работает. Наверно автору стоит уточнить какой технологией он пользуется.
    Windows Forms
    10 октября 2011 г. 8:43
  • Я так понимаю, что если свойство не является виртуальным (о чем указано в первом сообщении), то вместо
     public override Color BackColor
    
    надо писать
     public new Color BackColor
    


    Да.
    10 октября 2011 г. 9:43
    Отвечающий