Расскажите про интерфейсы
От: Khimik  
Дата: 18.01.19 10:39
Оценка: :)
Я выучил что такое классы, но не осилил интерфейсы. Расскажите пожалуйста понятно, что это такое.
Я одно время думал, что интерфейс – это такой абстрактный класс, который поддерживает множественное наследование, поэтому его можно добавить к реальному (не абстрактному) классу при наследовании, соответственно расширив набор функций этого класса. А переменные в интерфейсе есть?

Вот пример использования интерфейсов для реализации умных указателей, который мне подсказали. Исходный код:

var
  s: TStrings;
begin
  s := TStringList.Create;
  try
    DoSomething(s);
  finally
    s.Free;
  end;
end;


С помощью интерфейсов этот код можно заменить на такой:

var
  s: IShared<TStrings>;
begin
  s := Shared<TStringList>.New;
  DoSomething(s);
end;


var
  s: Shared<TStrings>;
begin
  s := TStringList.Create;
  DoSomething(s);
end;


Я не понимаю суть этого кода. Например где хранится счётчик, сколько элементов s было создано? И в каких участках кода проверяется, не пора ли удалить неиспользуемые элементы?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.