DP Delphi / Pascal  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

RTTI и атрибуты

Этот тест проверяет не память на названия, а способность разбирать код, видеть границы механизма и выбирать исправление, которое не ломает соседние сценарии. Внутри 25 вопросов, из них 15 с фрагментами Object Pascal. Отдельные результаты показываются по разделам: «Расширенная RTTI», «Пользовательские атрибуты», «Динамический доступ», «Цена рефлексии» и «Ошибки интеграции».

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 70 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 25
В `RttiVisibility` контекст RTTI создаётся перед поиском свойства и освобождается после него. Какой вывод подтверждает ветвь с `GetProperty('Hidden')`?
PascalDelphi / Pascal · Расширенная RTTI
// Проследите фактическое поведение RttiVisibility.
program RttiVisibility;
{$APPTYPE CONSOLE}
uses System.Rtti;
type
  TSample = class
  private
    FHidden: Integer;
  published
    property Visible: Integer read FHidden write FHidden;
  end;
var
  Ctx: TRttiContext;
  Prop: TRttiProperty;
begin
  Ctx := TRttiContext.Create;
  try
    Prop := Ctx.GetType(TSample).GetProperty('Hidden');
    if Assigned(Prop) then
      Writeln(Prop.Name)
    else
      Writeln('missing');
  finally
    Ctx.Free;
  end;
end.
Вопрос 2 из 25
В практическом сценарии по теме «Пользовательские атрибуты» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 3 из 25
Две реализации темы «Динамический доступ» совпадают на обычном примере. Какое различие всё же меняет их договор?
Вопрос 4 из 25
Модуль, использующий тему «Цена рефлексии», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 5 из 25
В теме «Ошибки интеграции» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 6 из 25
Реализацию темы «Расширенная RTTI» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 7 из 25
Обычный пример по теме «Пользовательские атрибуты» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 8 из 25
Реализацию темы «Динамический доступ» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 9 из 25
Для темы «Цена рефлексии» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 10 из 25
Какой договор реализует `ReadProperty`, где контекст RTTI создаётся, поиск по имени проверяется на `nil`, а контекст освобождается в `finally`?
PascalDelphi / Pascal · Ошибки интеграции
// Определите реальную гарантию в RttiIntegration.
program RttiIntegration;
{$APPTYPE CONSOLE}
uses System.Rtti, System.SysUtils;
function ReadProperty(Instance: TObject; const Name: string): TValue;
var
  Ctx: TRttiContext;
  P: TRttiProperty;
begin
  Ctx := TRttiContext.Create;
  try
    P := Ctx.GetType(Instance.ClassType).GetProperty(Name);
    if not Assigned(P) then
      raise EPropertyError.CreateFmt('Property %s is absent', [Name]);
    Result := P.GetValue(Instance);
  finally
    Ctx.Free;
  end;
end;
begin end.
Вопрос 11 из 25
Какой сценарий по теме «Расширенная RTTI» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 12 из 25
Правка по теме «Пользовательские атрибуты» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 13 из 25
Для темы «Динамический доступ» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 14 из 25
Какое вычисление в `RttiCache` без необходимости повторяется 100000 раз?
PascalDelphi / Pascal · Цена рефлексии
// Отделите правило языка от удачного запуска RttiCache.
program RttiCache;
{$APPTYPE CONSOLE}
uses System.Rtti;
type
  TSample = class
  private
    FName: string;
  published
    property Name: string read FName write FName;
  end;
var
  Ctx: TRttiContext;
  Prop: TRttiProperty;
  I: Integer;
begin
  Ctx := TRttiContext.Create;
  try
    for I := 1 to 100000 do
      Prop := Ctx.GetType(TSample).GetProperty('Name');
    Writeln(Prop.Name);
  finally
    Ctx.Free;
  end;
end.
Вопрос 15 из 25
Обычный пример по теме «Ошибки интеграции» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 16 из 25
Модуль, использующий тему «Расширенная RTTI», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 17 из 25
В теме «Пользовательские атрибуты» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 18 из 25
В `TValueInvoke` контекст и объект корректно освобождаются, но в `Invoke` передаются `1` и строка `'2'`. Какое следствие относится именно к этому вызову?
PascalDelphi / Pascal · Динамический доступ
// Отделите правило языка от удачного запуска TValueInvoke.
program TValueInvoke;
{$APPTYPE CONSOLE}
uses System.Rtti;
type
  TCalc = class
    function Add(A, B: Integer): Integer;
  end;
function TCalc.Add(A, B: Integer): Integer;
begin
  Result := A + B;
end;
var
  Ctx: TRttiContext;
  M: TRttiMethod;
  Obj: TCalc;
begin
  Ctx := TRttiContext.Create;
  try
    Obj := TCalc.Create;
    try
      M := Ctx.GetType(TCalc).GetMethod('Add');
      Writeln(M.Invoke(Obj, [1, '2']).AsInteger);
    finally
      Obj.Free;
    end;
  finally
    Ctx.Free;
  end;
end.
Вопрос 19 из 25
Какой сценарий по теме «Цена рефлексии» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 20 из 25
Правка по теме «Ошибки интеграции» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 21 из 25
Для темы «Расширенная RTTI» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 22 из 25
Две версии `AttributeMetadata` сохраняют порядок `RequiredAttribute = class(TCustomAttribute);` → `property Name: string read FName write FName;`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Пользовательские атрибуты
// Отделите правило языка от удачного запуска AttributeMetadata.
program AttributeMetadata;
{$APPTYPE CONSOLE}
uses System.Rtti;
type
  RequiredAttribute = class(TCustomAttribute);
  TModel = class
  private
    FName: string;
  published
    [Required]
    property Name: string read FName write FName;
  end;
begin end.
Вопрос 23 из 25
Какое свойство темы «Динамический доступ» становится решающим на граничном входе или при другом порядке действий?
Вопрос 24 из 25
Модуль, использующий тему «Цена рефлексии», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 25 из 25
Какое свойство темы «Ошибки интеграции» становится решающим на граничном входе или при другом порядке действий?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу