Как сделать значение по умолчанию с помощью свойства struct? - PullRequest
4 голосов
/ 01 января 2011

Я хотел бы знать, как применить атрибут [DefaultValue] к свойству struct.Вы можете заметить, что Microsoft делает это с помощью размера формы и многих других свойств.Типы их значений: Размер, Точка и т. Д. Я бы хотел сделать то же самое с моей собственной структурой.

Ответы [ 3 ]

10 голосов
/ 01 января 2011
[DefaultValue(typeof(Point), "0, 0")]

Был бы примером. Использование строки для инициализации значения является неизбежным злом, типы, которые вы можете использовать в конструкторе атрибутов, очень ограничены. Только простые типы значений, строка, тип и одномерный массив из них.

Чтобы это работало, вы должны написать TypeConverter для вашей структуры:

[TypeConverter(typeof(PointConverter))]
[// etc..]
public struct Point
{
   // etc...
}

Документация по преобразователям типов в библиотеке MSDN невелика. Использование преобразователей типов .NET, источник которых вы можете посмотреть в справочном источнике, или обратный инжиниринг в Reflector - это отличная отправная точка для того, чтобы начать работать самостоятельно. Остерегайтесь культуры, кстати.

5 голосов
/ 01 января 2011

[DefaultValue] атрибут предназначен только для дизайнера / генератора кода и т. Д. Вы не можете использовать его для structs. structs из всех типов являются значениями и не могут поддерживать конструктор по умолчанию. При создании объекта struct все его свойства / поля устанавливаются в значения по умолчанию. Вы не можете изменить это поведение.

MSDN ссылка:

http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx

Примечания:

Вы можете создать DefaultValueAttribute с любым значением. Член по умолчанию значение обычно является его начальным значением. Визуальный дизайнер может использовать по умолчанию значение для сброса значения члена. Генераторы кода могут использовать по умолчанию Значения также, чтобы определить, является ли код должен быть сгенерирован для участника.

Примечание:

DefaultValueAttribute не вызовет член должен быть автоматически инициализируется с атрибутом значение. Вы должны установить начальное значение в вашем коде.

1 голос
/ 01 января 2011

Это зависит от типа свойства - в атрибутах можно использовать только постоянные значения, поэтому это должен быть примитивный тип, строка, тип enum или любой другой тип, допустимый в контексте const.

Таким образом, если ваше свойство является строкой, вы просто должны сделать что-то вроде:

[DefaultValue("foo")]
public string SomeProperty { get; private set; }

Обратите внимание, что это не будет влиять на поведение конструктора по умолчанию для структурыкоторый все еще инициализирует SomeProperty в ноль;этот атрибут влияет только на поведение панели свойств Visual Studio.

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