2009-05-25 2 views
9

Possibili duplicati:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?A cosa serve Reflection in .NET?

Qual è la necessità di una riflessione in .NET? Quali sono le situazioni in cui è utile?

+0

È utile quando non funziona nient'altro. Proprio come javascript nel mondo del web. :) –

+2

Duplicate: http://stackoverflow.com/questions/429962/when-do-you-use-reflection-patterns-anti-patterns ... ... ... ... anche : http://stackoverflow.com/questions/864332/what-exactly-is-reflection-and-when-is-it-a-good-approach – Shog9

risposta

10

Diciamo che stai scrivendo una routine di serializzazione di base, che serializzerà qualsiasi oggetto in XML. Come lo renderesti abbastanza generico, in modo che possa funzionare per qualsiasi oggetto? Se si dispone di una classe in cui si conoscono tutte le proprietà, è possibile scrivere facilmente una funzione "ToXml()", in cui si scrivono manualmente tutte le proprietà in XML. Cosa succede se si desidera estendere questo a qualsiasi oggetto? In tal caso, è necessario riflettere sulle proprietà in fase di esecuzione e scriverle nell'XML.

Ci sono molti altri usi per questo, è il primo che mi è venuto in mente.

3

penso che il Wikipedia article on reflection è abbastanza buono:

In informatica, la riflessione è il processo mediante il quale un programma per computer può osservare e modificare il proprio struttura e il comportamento. Il paradigma di programmazione guidato dalla riflessione si chiama programmazione riflettente . È un tipo particolare di metaprogrammazione.

In molte architetture di computer, istruzioni del programma vengono memorizzati come dati - da qui la distinzione tra istruzione ed i dati è solo una questione di come l'informazione è trattata dal computer e linguaggio di programmazione. Normalmente, le "istruzioni" sono "eseguite" e "dati" è "elaborato"; tuttavia, in alcune lingue, i programmi possono anche trattare le istruzioni come dati e quindi apportare modifiche riflettenti . Riflessione è più comunemente usato in alto livello virtuali linguaggi di programmazione macchina, come Smalltalk e linguaggi di scripting, e meno comunemente usato in manifestamente digitato e/o staticamente tipizzato programmazione linguaggi come Java e C.

Reflection consente di ottenere informazioni sul tipo di oggetto al momento dell'esecuzione. Questo può essere utile in molte situazioni tra cui (ma limitato a) serializzazione e mapping relazionali agli oggetti.

+0

Ma non limitato a? – jedmao

1

riflessione viene utilizzato quando non si conosce al momento della compilazione cui il tempo è l'oggetto o l'azione da fare o su quello di proprietà ...

È possibile utilizzare la riflessione per trovare tutti gli oggetti di tipo X in un dato Assembly, o invoca qualche metodo dal suo nome (recuperato da un db, o file di configurazione ...), stessa cosa per l'impostazione di una proprietà .... cose del genere (queste sono le circostanze in cui lo abbiamo usato)

4

Ci sono molti usi per la riflessione. Il .NET Framework lo utilizza per serialization e per data binding, può anche essere utilizzato per creare strumenti che esaminano il codice come Reflector, FxCop e NUnit nonché i framework di database ORM. Ha una vasta gamma di usi in fase di esecuzione dalla registrazione di elementi specifici su un oggetto a Dependency Injection Frameworks. Può anche essere utilizzato per eseguire dinamicamente i metodi o impostare le proprietà in fase di esecuzione come avviene con gli attributi personalizzati. Può anche essere utilizzato in programmi di livello superiore come metaprogramming e codice auto-modificante.

3

E 'usato per la metaprogrammazione, che è quando si codifica di codice in sé, piuttosto che i soliti problemi di business

2

Può anche essere molto utile per testare l'applicazione, ad esempio, test unitari o altri tipi di strutture di test. Utilizzando la reflection è possibile ad esempio creare un file xml (o qualche altro file di dati di input in un formato adatto) e fare analizzare il programma e chiamare i metodi definiti nel file. Questo è il modo in cui funziona Fitnesse.