Блогът на GunSmoker (преводи) Хак - 5 Достъп до частни полета

. когато промяната на нечий ум става толкова лесна, колкото програмирането на компютър, какво означава да си човек.

Hack # 5: Достъп до частни полета

Това е преводът на Hack # 5: Достъп до частни полета. Автор: Hallvard Vassbotn.

Както майка ви каза, трябва да защитите личните си данни и да не докосвате личните данни на други хора. Същото се отнася и за програмирането. Капсулирането и скриването на информация са двата основни стълба на ООП, така че е по-добре да не се включваме в това, нали? Точно. Но един ден, с пълнолуние, имах неустоима жажда да стигна до личните полета от друг клас (деклариран в друг модул).

Когато е възможно, споменатият по-рано хак е за предпочитане пред техниката, описана в тази статия. Понякога обаче този хак не е практичен или възможен. Използването на RTTI е относително бавно (въпреки че можете да използвате кеширане) и частните полета може изобщо да не бъдат изложени чрез свойства. Освен това, ако имате нужда от достъп до всички частни полета наведнъж, тогава описаното тук решение също може да е за предпочитане.

Както споменах по-рано, концепцията за частни данни на Delphi (в сравнение със строгите частни данни в D2006 и нагоре) все още позволява на друг код в същия модул да има достъп до данни от пълен клас, но изключва достъпа от други модули. С други думи, всички класове и подпрограми в един модул със сигурност са „приятели“ един на друг (по смисъла на C ++).

Забелязали ли сте как някои VCL класове си взаимодействат? Например абстрактният базов клас за системата за персистентност на компонентите (TFiler) дефинира няколко частни полета. Но в действителност други класове, декларирани в същия модул, работят с тези полета: TReader и TWriter (и двете обаче са наследници на TFiler). И двата класа са декларирани в един и същ модул и грубо използват частните полета, дефинирани в TFiler (например, най-важното поле е FStream).