неправильно этот каст понимаю?
смотри, компилятор генерирует вызовы _AddRef/Release только при присваивании (явном или неявном) интерфейсной ссылки. если у тебя нет интерфейсной ссылки - вызовов этих попросту не будет. так что если у тебя код типа var A := TMyClass.Create; то компилятору посрать, от какого там класса твой класс порожден, что там по интерфейсам и т.д. он воспринимает такой код как присваивание ссылки на объект. поэтому, если тебе надо счетчик ссылок, то ты должен убедить компилятора что в данном случае имеет место присваивание именно интерфейсной ссылки. как это сделать? два пути: 1. объявляешь явный тип переменной: а) var A: IMyInterface; ... A := TMyClass.Create; б) var A: IMyInterface := TMyClass.Create 2. каст var A := TMyClass.Create as IMyInterface; во всех этих вариантах компилятор видит явный интерес использовать именно интерфейсную ссылку, а не ссылку на объект
понял, ни разу не юзал второй вариант, всегда по старинке делал
поскольку человек выше спросил именно про области видимости, то я решил дать пример именно с inline var, т.к. такую переменную например можно объявить внутри итерации цикла - то есть ее область видимости будет более узкой, чем у просто локальной переменной
Обсуждают сегодня