Почему.
Потому-что код
_prop_Data := _DoData('test');[/code]менее эффективен чем такой (имеется ввиду, что string - это property с функциональностью doData):
_prop_Data.string := 'test';[/code]
Компилятор, в первом случае: сформирует вспомогательную переменную типа TData; передаст ее указатель в ф-ю doData (которая и заполнит необходимые поля); после этого скопирует всю переменную в _prop_Data; и наконец освободит память под эту вспомогательную переменную. Не считая того, что все это будет обложено блоком try-finaly (освобождение памяти - в блоке finaly)
Во втором же случае, поля будут формироваться сразу в _prop_Data