Что такое отражение?

Я ОЧЕНЬ новичок в ASP.NET. Я пришел из фона VB6 / ASP (классический) / SQL Server 2000. Я много читаю о Visual Studio 2008 (установил и ковыряюсь). Я читал о «отражении» и хотел бы, чтобы кто-нибудь как можно лучше объяснил старому разработчику технологий, которые я написал выше, что такое «отражение» и почему я бы его использовал ... У меня проблемы с получением моя голова вокруг этого. Спасибо!

Это форма метапрограммирования.

OnesimusUnbound 05.10.2008 06:40

Я начинаю это понимать. Это довольно круто.

user25211 05.10.2008 06:43

возможный дубликат Что такое отражение и почему оно полезно?

nawfal 10.06.2013 12:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
3
1 116
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Отражение - это то, как вы можете исследовать внутреннее устройство различных типов, обычно не имея доступа (т.е. закрытые, защищенные и т. д. Члены).

Он также используется для динамической загрузки DLL и получения доступа к определенным в них типам и методам без их статической компиляции в ваш проект.

В двух словах: Reflection - это ваш набор инструментов для того, чтобы заглянуть под капот фрагмента кода.

Что касается того, почему вы бы его использовали, он обычно используется только в сложных ситуациях или при анализе кода. Другое распространенное использование - загрузка предварительно скомпилированных плагинов в ваш проект.

Спасибо. Это проясняет ... многое. Все еще немного запутался. Но теперь я стал более ясным в этом вопросе. Что-то вроде "метакода"? (Я придумал это слово, но в общем смысле «мета ...»?

user25211 05.10.2008 06:39

Под обычным определением «мета ...» вы подразумеваете код, описывающий код. Это то, что предоставляет пространство имен Reflection, это описание. Код, который использует Reflection, каким-то образом использует эту информацию, будь то информация о собственной сборке,

Matthew Scharley 05.10.2008 06:48

или какая-то другая сборка, которую вы загрузили, динамически или нет.

Matthew Scharley 05.10.2008 06:49

Это позволяет отражать внутренности объекта во внешний мир (код, использующий указанные объекты).

Практическое использование в статически типизированных языках, таких как C# (и Java), заключается в том, чтобы разрешить вызов методов / членов во время выполнения через строку (например, имя метода - возможно, вы не знаете имя метода, который вы будете использовать при компиляции время).

В контексте динамических языков я не слышал этот термин так часто (как правило, вы не беспокоитесь о вышеупомянутом), кроме, возможно, для перебора списка методов / членов и т. д.

Так что это не только ASP.NET ..... Где еще это поддерживается И нужно ли мне беспокоиться об этом, поскольку я просто начинаю с "точечной сети"?

user25211 05.10.2008 06:40

Я не думаю, что вам нужно беспокоиться об этом, если вы только начинаете. Он является частью платформы .NET, хотя и актуален для всей разработки .NET (а не только для ASP.NET).

Eric Schoonover 05.10.2008 06:41

Отражение - это средство .Net для манипулирования или извлечения информации о сборке, классе или методе в время выполнения. Например, вы можете создать класс во время выполнения, включая его методы. Как указано в monoxide, отражение используется для динамической загрузки сборки в виде подключаемых модулей или, в предварительных случаях, для создания компилятора .Net, ориентированного на .Net, например IronPython.

Обновлено: Вы можете обратиться к теме на метапрограммирование и связанных темах для получения более подробной информации.

Ответ принят как подходящий

Отражение позволяет программно загрузить сборку, получить список всех типов в сборке, получить список всех свойств и методов этих типов и т. д.

Например:

myobject.GetType().GetProperty("MyProperty").SetValue(myobject, "wicked!", null)

Скорее всего, вам не нужно выполнять эту операцию, если вы "только начинаете работать с asp.net" :)

Eric Schoonover 05.10.2008 06:42

Вам, вероятно, не нужно использовать его немедленно, да. Но иногда полезно знать, о чем говорят другие люди!

yfeldblum 05.10.2008 06:49

Когда вы создаете сборку Любые в .NET (ASP.NET, Windows Forms, командная строка, библиотека классов и т. д.), В сборке также создается ряд «таблиц определений» метаданных, хранящих информацию о методах, полях и типах, соответствующих типы, поля и методы, которые вы написали в своем коде.

Классы в пространстве имен System.Reflection в .NET позволяют перечислять и взаимодействовать с этими таблицами, предоставляя «объектную модель» для запроса и доступа к элементам в этих таблицах.

Одним из распространенных способов использования Reflection является обеспечение расширяемости (плагинов) для вашего приложения. Например, Reflection позволяет вам динамически загружать сборку из пути к файлу, запрашивать ее типы для определенного полезного типа (например, интерфейса, который может вызывать ваше приложение), а затем фактически вызывать метод для этой внешней сборки.

Пользовательские атрибуты также идут рука об руку с отражением. Например, среда модульного тестирования NUnit позволяет вам указать тестируемый класс и методы тестирования, добавив атрибуты [Test] {TestFixture] в ваш собственный код.

Однако тогда средство выполнения тестов NUnit должно использовать Reflection для загрузки вашей сборки, поиска всех вхождений методов, имеющих атрибут test, а затем фактически вызвать ваш тест.

Это значительно упрощает его, но дает хороший практический пример того, где отражение имеет важное значение.

Отражение, безусловно, мощное средство, однако имейте в виду, что оно позволяет полностью игнорировать фундаментальную концепцию модификаторов доступа (инкапсуляция) в объектно-ориентированном программировании.

Например, вы можете легко использовать его для получения списка частных методов в классе и их фактического вызова. По этой причине вам нужно тщательно подумать о том, как и где вы его использовать, чтобы избежать обхода инкапсуляции и очень сильно связанного (плохого) кода.

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

Другие вопросы по теме