Расскажите про интерфейсы
От: 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...
Пока на собственное сообщение не было ответов, его можно удалить.