#29 Что такое рефлексия в языке C#? Ответ на вопрос собеседования C# /.Net

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 ต.ค. 2024
  • #reflection #рефлексия #globalassemblycache #gac #loadfile #loadfrom #csharp #dotnet #assembly #type #propertyinfo #constructorinfo #methodinfo #fieldinfo #andriyshyrokoriadov
    В видео описано что такое рефлексия и как её использовать. Помимо использования рефлексии, представлены практические примеры использования классов:
    Assembly
    Type
    PropertyInfo
    ConstructorInfo
    MethodInfo
    FieldInfo
    Указана разница между методами LoadFrom и LoadFile класса Assembly.
    Дана информация о том что такое глобальный кэш сборо или Global Assembly Cache.
    Обзор представлен в форме ответа на вопрос, который встречается на собеседованиях на позицию "программист C# / .Net".
    Подписывайтесь на канал [программирование, путешествия]: / @andreyshyrokoriadov
    0:05 - введение, чтение атрибутов
    0:45 - сравнение рефлексии со стандартным способом создания объектов
    2:45 - алгоритм работы рефлексии
    5:00 - загрузка файлов DLL
    6:10 - метод Load(string)
    6:43 - длинное имя библиотеки
    7:30 - разница между методами LoadFrom и LoadFile
    8:27 - Глобальный Кэш Сборок / Global Assembly Cache
    10:00 - класс Assembly
    11:05 - классы PropertyInfo, ConstructorInfo, MethodInfo, FieldInfo
    12:25 - практический пример
    20:20 - использование класса Type
    22:35 - использование класса MethodInfo
    27:10 - использование класса PropertyInfo
    28:42 - использование класса FieldInfo
    30:22 - использование класса ConstructorInfo
    31:40 - использование атрибутов
    38:30 - инициализация объекта при помощи рефлексии и использование данное объекта
    Текст к фильму доступен по ссылке: ashyrokoriadov...
    Ссылка на репозиториум с примерами: github.com/ash...
    Дополнительная информация:
    рефлексия - docs.microsoft...
    класс Assembly - docs.microsoft...
    класс Type - docs.microsoft...
    методы Load - docs.microsoft...
    Global Assembly Cache - docs.microsoft...
    класс PropertyInfo - docs.microsoft...
    класс ConstructorInfo - docs.microsoft...
    класс MethodInfo - docs.microsoft...
    класс FieldInfo - docs.microsoft...

ความคิดเห็น • 23

  • @AndreyShyrokoriadov
    @AndreyShyrokoriadov  3 ปีที่แล้ว +1

    Дополнительная информация на тему атрибутов - в соответствующем фильме: th-cam.com/video/jBqOj0EEUDw/w-d-xo.html

  • @moon5964
    @moon5964 6 หลายเดือนก่อน

    Отличные ролик

  • @aliakseyshliakhtsionak9006
    @aliakseyshliakhtsionak9006 2 ปีที่แล้ว +1

    Спасибо! Пересмотрел много видео, но Ваше оказалось наиболее доступным и содержательным!

  • @scolopendrachilopoda9704
    @scolopendrachilopoda9704 2 ปีที่แล้ว

    самый лучший канал объяснениям
    содержательно и приятно слушать
    спасибо за работу :)

  • @ivannebyshinets5682
    @ivannebyshinets5682 2 ปีที่แล้ว +1

    Долго, но очень полезно!

  • @apdgslfhsodbna
    @apdgslfhsodbna 2 ปีที่แล้ว

    Хороший и содержательный материал)

  • @turalaliyev3977
    @turalaliyev3977 2 ปีที่แล้ว

    Вы молодец! так держать, продолжайте пожалуйста!

    • @AndreyShyrokoriadov
      @AndreyShyrokoriadov  2 ปีที่แล้ว

      Спасибо за позитивный комментарий.

  • @ookhands3843
    @ookhands3843 4 หลายเดือนก่อน

    Спасибо. Можно пример из жизни, когда длл дергается рефдексией. В ролике объяснение не понятное. Спасибо.

    • @AndreyShyrokoriadov
      @AndreyShyrokoriadov  4 หลายเดือนก่อน +1

      В современных приложениях нет необходимости дергать длл рефлексией… поэтому примеров нет. Теория, которая когда-то была практикой.

  • @serb1146
    @serb1146 2 ปีที่แล้ว

    Андрей, спасибо за видео. Т.е. получается что рефлексия в .NET это тот же механизм описания/использования типа,
    что и TypeLibrary для технологии COM/DCOM/ActiveX?

    • @AndreyShyrokoriadov
      @AndreyShyrokoriadov  2 ปีที่แล้ว

      К сожалению, я не знаком с технологиями COM/DCOM/ActiveX и в связи с этим я не могу подтвердить или опровергнуть Ваше утверждение.

  • @JohnDoe-uu5jy
    @JohnDoe-uu5jy 3 ปีที่แล้ว +1

    Получается рефлексия разрушает первую парадигму ООП - Инкапсуляцию.

    • @AndreyShyrokoriadov
      @AndreyShyrokoriadov  3 ปีที่แล้ว +2

      Можно так сказать... Когда-то на собеседовании меня спросили можно ли вызвать приватный метод вне класса. Я опрометчиво ответил «нет» и был не прав. Рекрутер тогда вспомнил о рефлексии. Но справедливости ради, стоит добавить что вызывать таким образом приватные методы это очень плохая практика.

    • @limeniye4634
      @limeniye4634 3 ปีที่แล้ว

      Я думаю метаданные тоже нарушают инкапсуляцию.

    • @apdgslfhsodbna
      @apdgslfhsodbna 2 ปีที่แล้ว

      Так явное использование reflection в логике порождает метапарадигму программирования, это уже не о принципах ООП

  • @ashotrustavelyan7498
    @ashotrustavelyan7498 2 ปีที่แล้ว

    здравствуйте, var path = @"C:\Users\USER\source
    epos\MyApp\bin\Debug
    et5.0
    ef\MyApp.dll"; вот этот путь Assembly asm = Assembly.LoadFrom(path); не видит и выводит ошибку : "System.BadImageFormatException: 'Could not load file or assembly 'MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (0x80131058)". В чем же дело, не пойму ?? Заранее спасибо

    • @AndreyShyrokoriadov
      @AndreyShyrokoriadov  2 ปีที่แล้ว +1

      Это ошибка говорит о том, что Вы пытаетесь загрузить dll 64bit в приложении 32bit. В этому случае MyApp.dll скомпилирована как библиотека 64bit. Попытка загрузки такой библиотеки в приложении 32bit приведет к ошибке.