Документация по классу DefaultValueAttribute сбивает с толку

В этой статье объясняется запутанная документация по классу DefaultValueAttribute .

Исходная версия продукта: платформа .NET Framework
Исходный номер базы знаний: 311339

Сводка

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

Из этого можно сделать вывод, что если задать DefaultValue атрибут для свойства, свойство инициализируется этим значением. Однако следует задать атрибут свойства равным DefaultValue его инициализированному значению.

Дополнительная информация

В разделе Расширение метаданных с помощью атрибутов говорится:

Общеязыковая среда выполнения позволяет добавлять ключевое слово описательные объявления, называемые атрибутами, для добавления к заметкам элементов программирования, таких как типы, поля, методы и свойства. Атрибуты сохраняются вместе с метаданными файла microsoft платформа .NET Framework и могут использоваться для описания кода в среде выполнения или для влияния на поведение приложения во время выполнения.

Если атрибут свойства равен его инициализированному значению, вы можете получить доступ к метаданным свойства, чтобы определить значение по умолчанию. Затем это значение по умолчанию можно использовать для сброса соответствующей переменной-члена при необходимости. Можно также написать генераторы кода, чтобы с помощью атрибута DefaultValue определить, следует ли создавать код для переменной-члена. Необходимо определить, должен ли быть создан код для переменной-члена, чтобы правильно задать ее начальное значение.

DefaultValue Однако атрибут не приводит к инициализации начального значения со значением атрибута. Например, в следующем примере IsValueSet кода свойство имеет значение по умолчанию True , а также инициализируется значением True. Если не инициализировано m_isValueSet , начальное значение равно False.

Imports System.ComponentModel
Public Class DefaultAttributeSample
    ' You must still initialize your member variable to its default value;
    ' the DefaultValue attribute does not do this.
    Private m_isValueSet As Boolean = True
    ' The DefaultValue attribute should be equal to the member's initial
    ' value.
    <DefaultValueAttribute(True)> _
    Public Property IsValueSet() As Boolean
        Get
            IsValueSet = m_isValueSet
        End Get
        Set(ByVal Value As Boolean)
            m_isValueSet = Value
        End Set
    End Property
End Class

Дополнительные сведения о применении атрибутов для предоставления метаданных в среде CLR см. в статье Расширение метаданных с помощью атрибутов.

Так как вы можете отображать компоненты в конструкторе, например Visual Studio .NET или Visual Studio, компоненты требуют атрибутов, которые предоставляют метаданные для инструментов времени разработки.

Для правильного отображения элемента управления и его членов во время разработки атрибуты времени разработки имеют важное значение, так как они предоставляют ценную информацию средству визуального проектирования. Например, в следующем фрагменте CategoryAttribute кода атрибут позволяет браузеру свойств отображать TextAlignment свойство в Alignment категории . Атрибут DescriptionAttribute позволяет браузеру свойств предоставлять краткое описание свойства, когда пользователь щелкает его.

[
    Category ("Alignment"),
    Description ("Specifies the alignment of text.")
]
public ContentAlignment TextAlignment { //... }
<Category("Alignment"), _
Description("Specifies the alignment of text.")> _
Public Property TextAlignment As ContentAlignment
    ' ...
End Property

Примечание.

В Visual C# .NET, Visual Basic .NET или Visual Basic можно ссылаться на класс атрибутов с именем AttributeNameAttribute просто, как AttributeName в синтаксисе атрибута.

Ссылки

Дополнительные сведения см. в разделе Общие сведения об атрибутах.