Подтвердить что ты не робот

Через 3 минуты Что такое отражение?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Отражение похоже на морское наблюдение за кодом.

Ответ 6

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

Ответ 7

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

Ответ 8

Отражение - это возобновление кода.

Ответ 9

Отражение - это как метаданные, так и промежуточный язык Microsoft (MSIL) вместе, завернутый в переносимый файл Exutable (PE), и этот доступ можно получить во время выполнения с помощью механизма.

Ответ 10

Отражение - это не что иное, как возможность доступа к методу других dll, которые не были включены в ваш проект (может быть система или ваш собственный) в динамическом режиме. Также полезно избегать проблем с круговой зависимостью.

Ответ 11

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

Ответ 12

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

using System;
using System.Reflection;

public class MyClass
{
   public virtual int AddNumb(int numb1,int numb2)
   {
     int result = numb1 + numb2;
     return result;
   }

}

class MyMainClass
{
  public static int Main()
  {
    // Create MyClass object
    MyClass myClassObj = new MyClass();
    // Get the Type information.
    Type myTypeObj = myClassObj.GetType();
    // Get Method Information.
    MethodInfo myMethodInfo = myTypeObj.GetMethod("AddNumb");
    object[] mParam = new object[] {5, 10};
    // Get and display the Invoke method.
    Console.Write("\nFirst method - " + myTypeObj.FullName + " returns " +  
                         myMethodInfo.Invoke(myClassObj, mParam) + "\n");
    return 0;
  }
}

ниже код получит информацию о типе:

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

Ниже приведенный ниже фрагмент кода получит информацию о методе

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

В следующем фрагменте кода вызывается метод AddNumb:

myMethodInfo.Invoke(myClassObj, mParam);