Die Anforderung erscheint mir irgendwie unsinnig. Wenn es einen Weg gäbe, das Feld für jeglichen Schreibzugriff innerhalb der Klasse zu sperren, dann würde das ja auch für den Code in der Implementation von SetID gelten.
Man könnte das Feld aber auch mitsamt property und Zugriffsmethoden in eine Parent-Klasse verlagern und dort als strict private deklarieren. Dann kann man es in der Child-Klasse nicht mehr direkt ansprechen.
Delphi-Quellcode:
type
TTestBase = class
strict private
fID : Integer;
function GetID:Integer;
procedure SetID(value: integer);
public
property ID:Integer read GetID write SetID;
end;
type
TTest = class(TTestBase)
procedure doWork;
end;