Class helpers والدعم الدقيق والصارم لمحددات الوصول ..جزأي ال private , protected في دلفي لهما خصوصية خاصة عن الكثير من اللغات ..
حيث تقوم دلفي بتقديم ميزة الأصناف الصديقة Friend Classes باندماج مع هذين الجزأين مما يعتبره البعض أنتهاك لقواعد التغليف ...
المشكله ببساطة هي كالتالي , أننا نعرف الأصناف التي تقبل الوصول لأعضاء أصناف أخرى (أصناف صديقة) في نفس الوحدة (مما يعطيها إمكانية الوصول حتى للأعضاء Private في "زمن كتابة الصنف" ) , ولكن ماذا لو قام المستخدم بتعريف أصناف أخرى عامة في نفس الوحدة , فإن ذلك سيسبب خرق لقاعدة التغليف حيث سيستطيع الوصول إلى البيانات الخاصة بالأصناف الموجودة في نفس الوحدة..
أما الآن مع دلفي 2005 فأن محددات الوصول هذه (Private و Protected) أصبحت صارمة باستخدام Strict , وبالتالي لايمكن الوصول إليها عند استخدام هذه الكلمة المفتاحية ..
وهذه التقنية متوفرة في كل من Delphi win32 و Delphi .Net .
ملاحظة هذه الميزة ليست خالية من الأخطاء , وإلا لكان تم الإعلان عنها , وربما تسبب أخطاء أثناء الإشتقاق (لم تجرب بشكل كافي بعد)
الأنماط المتداخلة أو Nested type declarations همهم .. ميزة حلوة , مثلا تعريف صنفين ضمن بعضهم :
type
TOuterClass = class
strict private
type
TInnerClass = class
end;
public
end;
لاحظ أمكانية استخدام Strict Private أيضا
يمكن القيام بـ Overloaded وتكرار للخصئص من النوع مصفوفة بالرغم من أنها Default هذه العبارة صحيحة :
• property Ints[index: Integer]: Integer read GetInts write SetInts; default;
• property Ints[Find: string]: Integer read GetIntsS write SetIntsS; default;
دعم المناهج الساكنة للأصناف Static
خصائص الأصناف . مثال :
• private
• class function GetClassProp: Integer; static;
• class procedure SetClassProp(const Value: Integer); static;
• Public
• class property P: Integer read GetClassProp write SetClassProp
تعاريف "const", "type" و "var" يمكن أن تكون ضمن تعريف الصنف :
• type
• TAbstract = class abstract
• public
• type
• TTestArray = array of Integer;
• TSealed = class sealed
• procedure DoIt(Param: Integer);
• end;
• const
• Cons = 13;
• ConsB: Integer = 12;
• var
• Y: Integer;
• end;
التهيئة الديناميكية للمصفوفات الديناميكية :باستخدام العبارة Create :
• type
• TDoubleArray = array of Double;
•
• var
• A: TDoubleArray;
• D: Double;
•
• begin
• A := TDoubleArray.Create(1.7, 3.9, 17.1, 39.7, 42.0);
• for D in A do
• Writeln(D:1:1);
• // etc...
المنهج Initialize للتهيئة ,
لتهيئة مصفوفة , وإعادة القيم الإفتراضية مثال :
A := TDoubleArray.Create(1.7, 3.9, 17.1, 39.7, 42.0);
Writeln('Size =',Length(A));
for D in A do
Writeln(D:1:1);
Initialize(A);
Writeln('Size =',Length(A));