Установка значения по умолчанию для свойств непостоянных типов?
-
03-07-2019 - |
Вопрос
У меня есть компонент Windows.Forms, который имеет свойство "mySize", которое возвращает структуру размера.Мое намерение состояло в том, чтобы это свойство автоматически вычисляло возвращаемый mySize на основе размера компонента, если только mySize не был явно задан, и в этом случае возвращайте установленное значение mySize .К сожалению, теперь, когда я встраиваю компонент в форму, разработчик Windows Forms решил начать явно генерировать и устанавливать значение для свойства mySize, что меня сильно сбивает с толку.
Поэтому мне нужно установить значение по умолчанию, чтобы Дизайнер ушел и оставил меня в покое.
Я прочитал ответы, касающиеся System.ComponentModel.defaultValue , поэтому я знаю, что я должен вручную установить значение для свойства в конструкторе, но ответы и документация, которые я нашел, касаются только установки значения по умолчанию False , константы.
Структура размера не является константой, и поэтому компилятор VB сходит с ума, говоря мне, что я не могу установить Size в качестве defaultValue для свойства типа Size, потому что размеры не являются константами.
От этого у меня болит мозг.
Вероятно, я могу обойти проблему с помощью кода, создав методы getMySize и setMySize вместо использования свойства, но я хотел бы знать, есть ли на самом деле какой-либо способ установить свойство по умолчанию для размера.
Примечание:Я не использую mySize как какую-то ненормальную попытку переопределить свойство Size (которое имеет значение по умолчанию 150x150, так что, похоже, что-то может установить значения по умолчанию для размеров);mySize - это просто некоторое значение размера, требуемое классом.
Решение
Вместо применения атрибута defaultValue напишите следующие два метода:
bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }
В ShouldSerializemySize верните true, если значение должно быть сериализовано в код.В ResetmySize верните свойству значение по умолчанию.
Разработчик компонентов автоматически подберет эти методы с помощью отражения.
Более подробная информация здесь:http://msdn.microsoft.com/en-us/library/53b8022e (ПРОТИВ 71).aspx
Другие советы
Я заметил, что на самом деле есть конкретный пример, приведенный для установки значения по умолчанию для размера типа в разделе Содержимого сообщества Страница MSDN defaultValue по умолчанию, который предлагает использовать конструктор defaultValue , описанный на эта страница.
К сожалению, хотя приведенный там пример верен в том смысле, что он работает, мне кажется, что документация MSDN естественным образом никого не приведет к этому ответу.
Я собираюсь установить ответ альбахари в качестве ответа на этот вопрос (потому что его ответ, по крайней мере, имеет какой-то смысл) и оставить этот пример здесь для полноты картины.