Через 3 минуты, что такое отражение? - PullRequest
41 голосов
/ 07 декабря 2009

Во многих списках вопросов интервью .Net (, включая хорошие ) содержится вопрос: «Что такое отражение?». Меня недавно попросили ответить на этот вопрос в контексте пяти вопросов - технического теста, который должен быть завершен за 15 минут на листе чистого листа бумаги, переданного мне в кафетерии. Мой ответ шел по принципу «Отражение позволяет вам открыть методы, свойства и поля любого объекта во время выполнения». Оглядываясь назад, мой ответ объясняет, как вы можете использовать рефлексию, но не объясняет, что такое рефлексия. На мой взгляд, моего ответа было достаточно, чтобы передать, что я понимаю, что такое отражение для , но не зашел так далеко, чтобы объяснить, что такое отражение .

Поэтому, пожалуйста, в контексте .Net своими собственными лаконичными словами определите, что такое Reflection . Не тратьте больше трех минут на ответы. Не обращайтесь к документации .Net , мы все это видели.

Ответы [ 12 ]

43 голосов
/ 07 декабря 2009

Отражение - это возможность динамически запрашивать и взаимодействовать с системой типов

12 голосов
/ 07 декабря 2009

форма самоанализа, то есть способность писать код, который запрашивает код

9 голосов
/ 07 декабря 2009

Отражение - это осведомленность CLR об объектах уровня кода, таких как имена классов, методы и т. Д., Которые предоставляются через API, а именно System.Reflection, который позволяет разработчику использовать узнаваемость этой информации во время выполнения в своем коде.

Нарушение правила : Я отредактировал этот ответ из его оригинальной формы для точности.

8 голосов
/ 07 декабря 2009

Отражение - это способность программы обрабатывать себя как данные.

6 голосов
/ 07 декабря 2009

Отражение похоже на навигацию кода.

5 голосов
/ 07 декабря 2009

Во время компиляции языка .Net компилятор помещает информацию о программе в файл программы. Эта информация может использоваться самой программой или другими программами, чтобы выяснить, какие классы содержит программа, каковы их методы, свойства, поля и события. Классы и их методы, свойства и т. Д. Также могут использоваться посредством отражения, даже если другая программа ничего не знает о них перед запуском. Это позволяет свободно связывать различные программы и делает возможным все виды захватывающих программ. Отражение также можно использовать для создания дополнительных классов в запущенных программах или в файлах программ.

4 голосов
/ 07 декабря 2009

Мне нравится ваш ответ, но я бы также упомянул, что Reflection - это также способ получения / установки закрытых / защищенных полей / свойств, которые иначе были бы недоступны во время выполнения.

2 голосов
/ 07 декабря 2009

Отражение - это резюме кода.

0 голосов
/ 15 сентября 2017

Используя Reflection в C #, можно узнать подробности об объекте, методе, а также создать объекты и вызвать методы во время выполнения.*

Type myTypeObj = Type.GetType("MyClass");

Следующий фрагмент кода получит информацию о методе

Methodinfo myMethodInfo = myTypeObj.GetMethod("AddNumb"); 

Следующий фрагмент кода вызовет метод AddNumb:

myMethodInfo.Invoke(myClassObj, mParam);
0 голосов
/ 06 февраля 2017

Отражение - это способность действовать как БОГ ( Г эрадикал О пераций D иректор ;-)) - вы можете «видеть» внутреннюю часть сборки и выполнять различные действия (System.Reflection), специально разработанные для среды выполнения, такие как запросы типов и их членов, поиск интерфейсов или атрибутов, создание экземпляров типов, неизвестных во время компиляции, и даже создание новых типов ( System.Reflection.Emit).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...