Kommt drauf an, was dein Ziel ist.
Wenn du "property RecData : TData read xGetRecData;" vom "published" in den "public" Abschnitt verschiebst, geht es schon.
A geht nicht, bei published property muss eine die Klasse streaming unterstützten, wenn du published mit public/private/protected tauscht, dann geht a auch.
b geht auf jeden Fall.
Falls du unbedingt published brauchst, dann kannst du statt Record TCollection nehmen.
Wie bereits schon gesagt ist der Unterschied hier nicht property vs Function sondern public vs published. Letzteres brauchst du eigentlich nur für Komponenten.
Dazu sei noch gesagt, readonly properties sind nur dann readonly wenn sie intern eine Funktion benutzen:
type
TMyClass = class
private
FData: Integer;
public
property Data: Integer read FData;
end;
var
MyInstance: TMyClass;
begin
// Schreiben einer "readonly" property:
MyInstance := TMyClass.Create;
PInteger(@MyInstance.Data)^:=42;
WriteLn(MyInstance.Data);
end.