ما هو خيار الفهرس في الفئات المشتقة TRemotable؟
سؤال
عندما يقوم معالج مستورد WSDL بإنشاء الواجهات، تحتوي جميع الخصائص على خيار الفهرس، ولكن عند قراءة الكود ووحدة InvocRegistry، لا يمكنني العثور على سبب ذلك، هل يعرف أحد ما إذا كان ذلك ضروريًا حقًا؟
مثله
Login = class(TRemotable)
private
[...]
published
property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified;
[...]
end;
أنا أسأل لأنني أريد تغيير هذه الوحدة، وإضافة بعض الواجهات إلى هذه الفئات، للتكامل مع إطار عمل MVP.
المحلول 2
لقد وجدت شرحًا أكثر تفصيلاً لهذا السؤال ،عند استخدام الفهارس، يمكن أن تشترك العديد من الخصائص في نفس طرق الوصول.
مثال جيد، من تعليمات دلفي 2009:
type
TRectangle = class
private
FCoordinates: array[0..3] of Longint;
function GetCoordinate(Index: Integer): Longint;
procedure SetCoordinate(Index: Integer; Value: Longint);
public
property Left: Longint index 0 read GetCoordinate write SetCoordinate;
property Top: Longint index 1 read GetCoordinate write SetCoordinate;
property Right: Longint index 2 read GetCoordinate write SetCoordinate;
property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;
property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;
...
end;
لاحظ أن جميع الخصائص تشترك في نفس طريقة الوصول.
نصائح أخرى
ويتم تمرير IS_OPTN إلى GetUser وSetUser عبر المعلمة "مؤشر" عند الوصول إلى خاصية مستخدم.
ووحاصل / اضعي ربما تبدو هذه:
function GetUser(Index:Integer):String;
procedure SetUser(Index:Integer;const value:string);
وهكذا، والتفكير في الأمر على النحو التالي:
MyString := MyLogin.user;
// is translated to:
MyString := getUser(IS_OPTN);
و
MyLogin.user := 'me';
// is translated to:
SetUser(IS_OPTN,'me');
نعم، كان ذلك ضروريا. مع هذه المعلومات، على سبيل IS_OPTN exemple، الفئة من TRemotable يعرف أنه عندما خاصية اختيارية لبناء XML، حتى إذا هو اختياري، يتم إضافة العقدة فقط إذا تم تخزين القيمة. على قضيتك:
property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified
ستضاف المستخدم م> في XML إذا <م> User_Specified م> صحيح العنصر. و<م> User_Specified م> يتحول صحيح تلقائيا عند تعيين القيمة إلى المستخدم، لأن SetUser اضع تفعل ذلك.
وهكذا، عندما مكون سبيل المثال SOAP بور، وبناء على XML، ستضاف عنصر فقط إذا تم تخزين لأنها الاختياري (IS_OPTN).