Warum gibt IcustOMATTRIBUTEPROVIDER.getCustomattributes () Objekt [] anstelle von Attribut [] zurück?
-
26-10-2019 - |
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
?
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.