[Foo(bla)]
- это синтаксис для атрибута - дополнительные метаданные о некотором типе или элементе (или даже самой сборке; или даже параметрах). Вы можете написать свои собственные атрибуты, например, что-то вроде:
public class ConfigurationPropertyAttribute : Attribute {
public ConfigurationPropertyAttribute(string something) {...}
}
выводится имя Attribute
, поэтому требуется только [ConfigurationProperty]
. Строка "providers"
используется в качестве аргумента конструктора, а также вы можете использовать присваивания свойств, например:
[Foo(123, "abc", Bar = 123)]
ищет тип FooAttribute
или Foo
с конструктором, который принимает int
и string
и имеет свойство Bar
, которому можно присвоить int
.
Большинство атрибутов ничего не делают напрямую , но вы можете написать код, который проверяет типы для атрибутов (с помощью отражения), что является очень удобным способом для библиотечного кода, зная, как работать с типом.
Например:
[XmlType("abc"), XmlRoot("abc")]
public class MyType {
[XmlAttribute("name")]
public string UserName {get;set;}
}
это перенастраивает XmlSerializer
(который проверяет вышеуказанные атрибуты) для сериализации типа как:
<abc name="blah"/>
где без атрибутов это будет:
<MyType><UserName>blah</UserName></MyType>