Perché ICustomAttributeProvider.GetCustomAttributes () oggetto di ritorno [] invece di attributo []?

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

Domanda

Perché ICustomAttributeProvider.GetCustomAttributes() ritorno object[] invece di Attribute[]?

C'è qualche circostanza quando si utilizzano le implementazioni ICustomAttributeProvider da assemblee mscorlib e sistema tornerà oggetti che non sono di tipo Attribute?

È stato utile?

Soluzione

La specifica CLI ( ECMA 335 ) Partition II, clausola 21 stati in parte:

Mentre qualsiasi tipo definito dall'utente può essere utilizzato come attributo, rispetto CLS richiede che gli attributi saranno istanze tipi la cui classe di base è System.Attribute.

In altre parole, una lingua che non è compatibile con CLS può consentire di specificare gli attributi che non derivano da Attribute, quindi il metodo GetCustomAttributes è probabilmente progettato per consentire tali attributi per essere consumato.

Sono abbastanza sicuro che esista il linguaggio tali non-CLS-compliant, e .NET non lo supporta, ma si può immaginare che i progettisti di riflessione non ha voluto escludere la possibilità in futuro.

Per quanto riguarda la seconda domanda, una rapida ispezione del codice sorgente per spettacoli System.Reflection che si ottiene sempre indietro Attribute[]. Dal momento che gli oggetti restituiti sono sempre Attribute[], si può tranquillamente li lanci, ma non c'è alcuna garanzia che sarà sempre funziona in questo modo.

Altri suggerimenti

Per dare un'occhiata veloce con riflettore, in ogni luogo è usato essi svolgono un cast sicuro per attributo [], quindi credo che sia sicuro per voi di fare lo stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top