Значение по умолчанию для пользовательского свойства и .NET Designer - PullRequest
0 голосов
/ 10 февраля 2010

Каков наилучший способ избежать (или контролировать) инициализацию разработчиком тяжелого настраиваемого свойства в .NET? Иногда важно, чтобы свойство было установлено на что-то изначально, без того, чтобы этот параметр действовал при первоначальном задании.

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

public class A : UserControl
{
  public int UpdateSetting 
  {
    // Write to database or some such thing
  }

...

  public void InitializeComponent()
  {
    A a = new A();
    a.UpdateSetting = 0;  // Causes database write
  }
}

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Предполагая, что вы управляете компонентом (класс A), примените DesignerSerializationVisibilityAttribute к дорогостоящему свойству с опцией Hidden, чтобы сказать «не генерировать установщик для этого свойства»:

public class A : UserControl
{
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  public int UpdateSetting 
  {
    // Write to database or some such thing
  }
}

(РЕДАКТИРОВАТЬ: При повторном чтении я не уверен, хотите ли вы предотвратить инициализацию дизайнером, или сделать ее необязательной, или разрешить это делать через конструктор, но отложить фактическое выполнение инициализации. Это адреса только первый из этих сценариев.)

1 голос
/ 10 февраля 2010
[Default(0)]
public int UpdateSetting 
{
    get { /*...*/}
    set {/* Write to database or some such thing... */ }
}

Это заставит его сначала показывать 0 в конструкторе (и показывать его жирным шрифтом, если вы установите его обратно в 0 после его изменения) без каких-либо фактических настроек в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...