मुझे डेल्फी में सहायक पुन: घोषणा में समस्या है।

HelperDecl.pas

unit HelperDecl;

interface

type
  TCustomField = Word;

  TCustomFieldHelper = record helper for TCustomField
  public
    procedure SampleMethod();
  end;

implementation

procedure TCustomFieldHelper.SampleMethod();
begin
end;

end.

ScopeTest.pas

unit ScopeTest;

interface

uses HelperDecl;

type
  rec = record
    art: TCustomField;
  end;

implementation

uses System.SysUtils;

procedure DoScopeTest();
var
  a: TCustomField;
  r: rec;
begin
  a := r.art;
  r.art.SampleMethod(); //Here has the compiler no problems
  a.SampleMethod(); //Undeclared identifier 'SampleMethod'
end;

end.

लेकिन मैंने केवल अपने स्थानीय डेटा प्रकार के लिए एक सहायक को परिभाषित किया है (हाँ, यह वर्ड से लिया गया है)! SysUtils में सहायक Word के लिए सहायक है, मेरे कस्टम डेटा प्रकार के लिए नहीं! मेरा डेटा प्रकार बंद करो!

जब मैं uses System.SysUtils; को uses HelperDecl; से पहले ले जाता हूं तो यह काम करता है। लेकिन मैं एक मनमानी इकाइयों के उपयोग का आदेश देना चाहता हूं।

5
Paul 17 सितंबर 2020, 12:42

2 जवाब

सबसे बढ़िया उत्तर

समस्या यह है कि TCustomField और Word एक ही प्रकार के हैं और एक ही प्रकार के लिए दो रिकॉर्ड सहायक होना संभव नहीं है।

यदि आप इसके बजाय TCustomField को विशिष्ट प्रकार के अनुसार जाने देते हैं, तो यह काम करेगा:

type
  TCustomField = type Word;
7
Andreas Rejbrand 17 सितंबर 2020, 12:46

डेल्फी केवल एकल सहायक का समर्थन करता है। जब आपके पास स्कोप में कई हेल्पर होते हैं, तो निकटतम स्कोप से हेल्पर का उपयोग किया जाता है।

आप एकाधिक सहायकों को एक ही प्रकार से परिभाषित और संबद्ध कर सकते हैं। हालांकि, स्रोत कोड में किसी विशिष्ट स्थान पर केवल शून्य या एक सहायक लागू होता है। निकटतम दायरे में परिभाषित सहायक लागू होगा। क्लास या रिकॉर्ड हेल्पर स्कोप सामान्य डेल्फी फैशन में निर्धारित किया जाता है (उदाहरण के लिए, यूनिट के उपयोग क्लॉज में दाएं से बाएं)।

क्लास और रिकॉर्ड हेल्पर्स

3
Dalija Prasnikar 17 सितंबर 2020, 12:47