Results 1 to 3 of 3

Thread: Interface en constructor

  1. #1

    Interface en constructor

    Hallo hallo,

    Is het mogelijk om een bepaalde constructor af te dwingen middels een interface?

    Code:
      IDataEditView = interface
        ['{0C1D5B61-0D15-421E-ABE1-A8176E8EC9E9}']
        constructor CreateDetailForm(AOwner: TComponent; AID: Integer);
        procedure Save;
        procedure Edit;
        procedure Delete;
        procedure Cancel;
        procedure Insert;
      end;
    Dit werkt helaas niet krijg de volgende melding:

    Code:
    [dcc32 Error] Model.Interfaces.pas(11): E2029 'END' expected but 'CONSTRUCTOR' found
    Bij voorbaat dank!

  2. #2
    Interfaces hebben geen constructor. Ze hebben alleen methods (en in Delphi, door wat 'syntactic sugar' ook nog properties).

    Je maakt namelijk geen instanties van een interface. Je maakt een instantie van een object dat een interface implementeert, en je zal dus ook altijd een constructor gebruiken van een specifieke class. Er is daarom geen reden om die constructor in een interface vast te leggen. Typisch gebruik zal er zo uit zien:

    Implementatie (met zijn eigen constructor):
    Delphi Code:
    1. type
    2.   TJouwDataEditView = class(TInterfacedObject, IDataEditView)
    3.     constructor CreateDetailForm(AOwner: TComponent; AID: Integer);
    4.     // Hier nog al die implementaties van de interface methods.
    5.   end;
    Aanroep van die constructor. Je roept de constructor van de class aan, maar het resultaat sla je op in een variabele van het interface-type.
    Delphi Code:
    1. var
    2.   DataEditView: IDataEditView;
    3. begin
    4.   DataEditView := TJouwDataEditView.Create(Self, 10);
    1+1=b

  3. #3
    Zoals jij het beschrijft klinkt het wel logisch waarom het niet bestaat.

    Dank je wel!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •