Warum gibt IcustOMATTRIBUTEPROVIDER.getCustomattributes () Objekt [] anstelle von Attribut [] zurück?

StackOverflow https://stackoverflow.com/questions/5823790

Frage

Warum tut ICustomAttributeProvider.GetCustomAttributes() Rückkehr object[] Anstatt von Attribute[]?

Gibt es irgendeine Umstände, wenn Sie die verwenden? ICustomAttributeProvider Implementierungen von MSCORLIB- und Systemanordnungen geben Objekte zurück, die nicht vom Typ sind Attribute?

War es hilfreich?

Lösung

Die CLI -Spezifikation (ECMA 335) Partition II, Klausel 21 Staaten zum Teil:

Während ein benutzerdefinierter Typ als Attribut verwendet werden kann, erfordert die CLS-Konformität, dass Attribute Instanzen von Typen sind, deren Basisklasse ist System.Attribute.

Mit anderen Worten, eine Sprache, die nicht CLS-konform ist Attribute, so die GetCustomAttributes Die Methode ist wahrscheinlich so konzipiert, dass solche Attribute konsumiert werden können.

Ich bin mir ziemlich sicher, dass keine solche nicht-cls-konforme Sprache existiert, und .NET unterstützt sie nicht, aber man kann sich vorstellen, dass die Designer der Reflexion die Möglichkeit in Zukunft nicht ausschließen wollten.

Was Ihre zweite Frage betrifft, eine kurze Überprüfung des Quellcodes für System.Reflection zeigt, dass Sie immer eine bekommen Attribute[] der Rücken. Da sind die zurückgegebenen Objekte immer Attribute[], Sie können sie sicher wirken, aber es gibt keine Garantie dafür, dass es immer so funktionieren wird.

Andere Tipps

Indem sie einen kurzen Look mit Reflektor werfen, führen sie an jedem Ort, an dem er verwendet wird, einen sicheren Besetzung aus, um es zuzuweisen []. Ich denke, es ist sicher, dass Sie dasselbe tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top