понедельник, 15 июля 2013 г.

Из "закромов"

1.

function A: TList;
begin
 Result := nil;
end;

function B: Integer;
begin
 Result := A.Count;
end;

var
 X : Integer;
begin
 X := B;
end;

Вопрос - чему равно X?

2. В чем ошибочен код:

Function A: TList;
Begin
 Reslt := TList.Create;
End;

Function GetPersons(aList: TList);
Begin
 aList.Add(TPerson.Create(‘Иванов’));
 aList.Add(TPerson.Create(‘Петров’));
End;

Var
 l_List : TList;
Begin
 l_List := A;
 GetPersons(L);
End.

3. Дан интерфейс X, как реализовать его на классе - потомке от Y?

В качестве Y использовать - TObject, TComponent и TinterfacedObject.


Условие: Нужно, чтобы число ссылок управляло временем жизни реализующего объекта.

4. Что вы знаете про шаблоны publisher/subscriber и strategy?
На какой механизм Delphi они похожи?.

5. Что такое implements?
Дайте пример поведения счетчика ссылок с implements и без него.


7 комментариев:

  1. 1. думаю либо -1 либо хз
    2. Ну дело ведь в названии переменной :)
    (хотя это по сути и не переменная вовсе, поправьте плз если неправ)
    Function A: TList;
    Begin
    Reslt := TList.Create;
    End;
    Ну а если серьезно то ...
    что такое L ?
    Var
    l_List : TList;
    Begin
    l_List := A;
    GetPersons(L); // Здесь наверно должен быть
    //GetPersons(l_List);
    End.
    Ну и по итогу надо FreeAndNil(l_List);
    хотя буду на работе проверю :) вы меня заинтриговали.
    Ещё думаю что проблема может быть в функции А.
    остальные к сожалению хз. :(

    ОтветитьУдалить
  2. "думаю либо -1 либо хз "

    Вы издеваетесь?

    ОтветитьУдалить
    Ответы
    1. AV там будет на Result := A.Count;
      По второму - действительно, L откуда взялось? Ну и "согласен с предыдущим оратором" - надо Free для списка, а перед этим для каждого TPerson в списке.
      Implements - ключевое слово, применяется к property для того, чтобы делегировать тому, кто в этом property "сидит", реализацию какого-то интерфейса. Вот что в вопросе со счетчиком ссылок имелось ввиду - не понял, но я бы ответил про разницу TInterfacedObject / TContainedObject и про то, что классу, который будет использоваться с implements не нужен подсчет ссылок, поскольку время жизни его экземпляров равно времени жизни объекта, который его агрегирует.

      Удалить
    2. Да - AV.
      L - опечатка. Да! - не хватает FreeAndNil.
      про Implements - ОТДЕЛЬНО напишу. Там есть вероятность словить AV.

      Удалить
  3. "Ну и по итогу надо FreeAndNil(l_List);"

    Я "не помню"... Но идея была как раз в этом. Причём - не ОДИН Free.

    ОтветитьУдалить
  4. "остальные к сожалению хз. :("

    даже implements?

    ОтветитьУдалить