Pracowałem z Reflections i chciałem uzyskać wszystkie atrybuty zadeklarowane dla właściwości. Istnieją dwie właściwości pod klasą PropertInfo
, które są CustomAttributes
i Attributes
.Atrybuty a niestandardowe atrybuty w PropertyInfo
Według MSDN, są wyjaśnione następująco:
cechami:
Ta właściwość reprezentuje cech związanych z elementem. Wszystkie elementy członkowskie mają zestaw atrybutów zdefiniowanych w odniesieniu do określonego typu elementu . Atrybuty właściwości informują użytkownika, czy ta właściwość jest domyślną, właściwością SpecialName, a więc włączona.
Uwaga: Próbka kod podany na stronie PropertyInfo.Attributes
nawet nie działa.
klienta atrybutów:
tablicę, która zawiera wszystkie atrybuty niestandardowe stosowane do tego członka albo z tablicy zerowej elementy, jeśli ma cechy są zdefiniowane.
Jednak gdy uruchamiam ten kod dla nich Attributes
nic nie zwraca natomiast CustomAttributes
powraca Required
.
void Main()
{
var attributes = typeof(Myproperty).GetProperty("Caption").CustomAttributes;
//var attributes = typeof(Myproperty).GetProperty("Caption").Attributes;
attributes.Dump(); //Dump is a LinqPad method which dumps everything to the outpu window
}
public class Myproperty
{
private string caption = "Default caption";
[Required]
public string Caption
{
get{return caption;}
set {if(caption!=value) {caption = value;}
}
}
}
Zasadniczo są tu nieco inne znaczenia słowa "atrybut". Wygląda na to, że chcesz CustomAttributes. –
Domyślam się, że to, czego chciałem, to "CustomAttributes", ale czy możesz wyjaśnić, na czym polega różnica? IMO wydaje się, że nie robi tego, co sugeruje jego nazwa. – Tarik
Zasadniczo patrz odpowiedź Hansa. To bardzo różne rzeczy. Spójrz na MethodInfo.Attributes na przykład, który może mieć dla ciebie więcej sensu - bardziej przypomina modyfikatory, które można zastosować do właściwości/metody/itp. –