2009-05-25 10 views
9

Możliwe duplikaty:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?Co to jest odbicie w .NET?

Jakie jest zapotrzebowanie na odbicie w .NET? W jakich sytuacjach może się przydać?

+0

Jest przydatny, gdy nic innego nie działa. Podobnie jak javascript w świecie WWW. :) –

+2

Duplikat: http://stackoverflow.com/questions/429962/when-do-you-use-reflection-patterns-anti-patterns ... ... ... ... Również : http://stackoverflow.com/questions/864332/what-exactly-is-reflection-and-when-is-it-a-good-approach – Shog9

Odpowiedz

10

Powiedzmy, że piszesz podstawową rutynę serializacji, która będzie serializować dowolny obiekt do XML. W jaki sposób uczynisz go generycznym wystarczająco, aby mógł działać dla dowolnego obiektu? Jeśli masz klasę, w której znasz wszystkie właściwości, możesz łatwo napisać funkcję "ToXml()", w której ręcznie wypiszesz wszystkie właściwości do XML. A co jeśli chcesz przedłużyć to do dowolnego obiektu? W takim przypadku należy zastanowić się nad właściwościami w środowisku wykonawczym i zapisać je w pliku XML.

Jest o wiele więcej zastosowań, to pierwszy, który przyszedł mi do głowy.

3

myślę Wikipedia article on reflection jest bardzo dobry:

W informatyce, odbicie jest procesem, w którym program komputerowy można obserwować i modyfikować własne strukturę i zachowanie . Paradygmat programowania sterowany przez odbicie nazywany jest programowaniem refleksyjnym . Jest to szczególny rodzaj metaprogramowania.

W wielu architektur komputerowych, instrukcje programu są przechowywane jako danych - stąd rozróżnienie między instrukcji i danych jest jedynie kwestia, w jaki sposób informacje są traktowana przez komputer i języku programowania. Normalnie, "instrukcje" są "wykonywane" i "dane" są "przetwarzane"; Jednak w niektórych językach, programy mogą również traktować instrukcje jako dane, a dokonać modyfikacji odblaskowych . Odbicie jest najbardziej powszechnie stosowany w wysokiej klasy wirtualnych języków programowania maszyna jak Smalltalk i języków skryptowych, a mniej powszechnie stosowane w sposób oczywisty wpisane i/lub statycznie wpisane programowania języków takich jak Java i C

Odbicie umożliwia uzyskanie informacji o typie obiektu w czasie wykonywania. Może to być pomocne w wielu sytuacjach, w tym (ale ograniczone do) serializacji i odwzorowań obiektowo-relacyjnych.

+0

Ale nie tylko? – jedmao

1

Odbicie jest używany, gdy nie wiesz, w czasie kompilacji, która razem, gdy obiekt jest lub jakie działania należy zrobić lub na co nieruchomość ...

Można użyć refleksji znaleźć wszystko obiektu typu X w biorąc pod uwagę Zgromadzenie lub wywołać jakąś metodę według jej nazwy (pobrane z db, lub pliku konfiguracyjnego ...), to samo dla ustawienia właściwości ... rzeczy takie jak te (są to przypadki, w których użyliśmy tego)

4

Istnieje wiele zastosowań do refleksji. The.NET Framework używa go do serialization i do data binding, może być również używany do tworzenia narzędzi, które badają twój kod, taki jak Reflector, FxCop i NUnit oraz frameworki baz danych ORM. Ma wiele zastosowań w czasie wykonywania, od rejestrowania określonych obiektów na obiekcie do Dependency Injection Frameworks. Może być również używany do dynamicznego uruchamiania metod lub ustawiania właściwości w środowisku wykonawczym, podobnie jak w przypadku atrybutów niestandardowych. Może być również używany w programowaniu wyższego poziomu, na przykład metaprogramming i samodefiniującym się kodzie.

3

Jest używany dla metaprogramowanie, czyli kiedy kodowanie o kodzie samego zamiast zwykłych problemów biznesowych

2

Może być również bardzo przydatna podczas testowania aplikacji, na przykład testy jednostkowe lub inne typy ram testowych. Używając odbicia możesz na przykład stworzyć plik xml (lub jakiś inny plik danych wejściowych w odpowiednim formacie) i twój program przeanalizuje go i wywoła metody zdefiniowane w pliku. Tak działa Fitnesse.