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





Отражение - это то, как вы можете исследовать внутреннее устройство различных типов, обычно не имея доступа (т.е. закрытые, защищенные и т. д. Члены).
Он также используется для динамической загрузки DLL и получения доступа к определенным в них типам и методам без их статической компиляции в ваш проект.
В двух словах: Reflection - это ваш набор инструментов для того, чтобы заглянуть под капот фрагмента кода.
Что касается того, почему вы бы его использовали, он обычно используется только в сложных ситуациях или при анализе кода. Другое распространенное использование - загрузка предварительно скомпилированных плагинов в ваш проект.
Спасибо. Это проясняет ... многое. Все еще немного запутался. Но теперь я стал более ясным в этом вопросе. Что-то вроде "метакода"? (Я придумал это слово, но в общем смысле «мета ...»?
Под обычным определением «мета ...» вы подразумеваете код, описывающий код. Это то, что предоставляет пространство имен Reflection, это описание. Код, который использует Reflection, каким-то образом использует эту информацию, будь то информация о собственной сборке,
или какая-то другая сборка, которую вы загрузили, динамически или нет.
Это позволяет отражать внутренности объекта во внешний мир (код, использующий указанные объекты).
Практическое использование в статически типизированных языках, таких как C# (и Java), заключается в том, чтобы разрешить вызов методов / членов во время выполнения через строку (например, имя метода - возможно, вы не знаете имя метода, который вы будете использовать при компиляции время).
В контексте динамических языков я не слышал этот термин так часто (как правило, вы не беспокоитесь о вышеупомянутом), кроме, возможно, для перебора списка методов / членов и т. д.
Так что это не только ASP.NET ..... Где еще это поддерживается И нужно ли мне беспокоиться об этом, поскольку я просто начинаю с "точечной сети"?
Я не думаю, что вам нужно беспокоиться об этом, если вы только начинаете. Он является частью платформы .NET, хотя и актуален для всей разработки .NET (а не только для ASP.NET).
Отражение - это средство .Net для манипулирования или извлечения информации о сборке, классе или методе в время выполнения. Например, вы можете создать класс во время выполнения, включая его методы. Как указано в monoxide, отражение используется для динамической загрузки сборки в виде подключаемых модулей или, в предварительных случаях, для создания компилятора .Net, ориентированного на .Net, например IronPython.
Обновлено: Вы можете обратиться к теме на метапрограммирование и связанных темах для получения более подробной информации.
Отражение позволяет программно загрузить сборку, получить список всех типов в сборке, получить список всех свойств и методов этих типов и т. д.
Например:
myobject.GetType().GetProperty("MyProperty").SetValue(myobject, "wicked!", null)
Скорее всего, вам не нужно выполнять эту операцию, если вы "только начинаете работать с asp.net" :)
Вам, вероятно, не нужно использовать его немедленно, да. Но иногда полезно знать, о чем говорят другие люди!
Когда вы создаете сборку Любые в .NET (ASP.NET, Windows Forms, командная строка, библиотека классов и т. д.), В сборке также создается ряд «таблиц определений» метаданных, хранящих информацию о методах, полях и типах, соответствующих типы, поля и методы, которые вы написали в своем коде.
Классы в пространстве имен System.Reflection в .NET позволяют перечислять и взаимодействовать с этими таблицами, предоставляя «объектную модель» для запроса и доступа к элементам в этих таблицах.
Одним из распространенных способов использования Reflection является обеспечение расширяемости (плагинов) для вашего приложения. Например, Reflection позволяет вам динамически загружать сборку из пути к файлу, запрашивать ее типы для определенного полезного типа (например, интерфейса, который может вызывать ваше приложение), а затем фактически вызывать метод для этой внешней сборки.
Пользовательские атрибуты также идут рука об руку с отражением. Например, среда модульного тестирования NUnit позволяет вам указать тестируемый класс и методы тестирования, добавив атрибуты [Test] {TestFixture] в ваш собственный код.
Однако тогда средство выполнения тестов NUnit должно использовать Reflection для загрузки вашей сборки, поиска всех вхождений методов, имеющих атрибут test, а затем фактически вызвать ваш тест.
Это значительно упрощает его, но дает хороший практический пример того, где отражение имеет важное значение.
Отражение, безусловно, мощное средство, однако имейте в виду, что оно позволяет полностью игнорировать фундаментальную концепцию модификаторов доступа (инкапсуляция) в объектно-ориентированном программировании.
Например, вы можете легко использовать его для получения списка частных методов в классе и их фактического вызова. По этой причине вам нужно тщательно подумать о том, как и где вы его использовать, чтобы избежать обхода инкапсуляции и очень сильно связанного (плохого) кода.
Отражение - это процесс проверки метаданных приложения. Другими словами, читая атрибуты, вы уже рассмотрели некоторые функции, которые отражают предложения. Отражение позволяет приложению собирать информацию о себе и действовать в соответствии с этой информацией. формирование. Отражение происходит медленнее, чем обычно выполняется статический код. Однако это может дать вам гибкость, которую статический код не может обеспечить
Это форма метапрограммирования.