Nick Hodges의 "Coding in Delphi"책을 읽고 있는데 인터페이스 사용법을 이해하려고합니다.Delphi 인터페이스를 이해하려고 시도하십시오.
unit INameImplementation;
interface
uses
INameInterface;
type
TPerson = class(TInterfacedObject, IName)
protected
function FirstName: string;
function LastName: string;
end;
implementation
{ TPerson }
function TPerson.FirstName: string;
begin
Result := 'Fred';
end;
function TPerson.LastName: string;
begin
Result := 'Flinstone';
end;
end.
나는 '이 시점에서 : 책의 샘플에 따라,
unit INameInterface;
interface
type
IName = interface
['{CE5E1B61-6F44-472B-AE9E-54FF1CAE0D70}']
function FirstName: string;
function LastName: string;
end;
implementation
end.
다른 장치에서 나는이 인터페이스의 구현을 넣어했습니다 는 단위에서 나는 asimple 인터페이스를 넣었습니다 내가 만든 객체를 사용하기 위해 간단한 VCL 양식 응용 프로그램을 만들었습니다. 양식 코드는 다음과 같습니다.
unit main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, INameImplementation;
type
TfrmMain = class(TForm)
lblFirtName: TLabel;
lblLastName: TLabel;
txtFirstName: TStaticText;
txtLastName: TStaticText;
btnGetName: TButton;
procedure btnGetNameClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Person: TPerson;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
txtFirstName.Caption := '';
txtLastName.Caption := '';
end;
procedure TfrmMain.btnGetNameClick(Sender: TObject);
begin
txtFirstName.Caption := ...
end;
end.
내 질문은 다음과 같습니다. 어떻게 인터페이스를 사용할 수 있습니까? 두 가지 기능은 protected로 선언되므로 양식에서 어떻게 액세스 할 수 있습니까? 내가 공개로 정의했거나 INameInterface 인터페이스 유닛을 사용해야합니까? 인터페이스에 대해 몹시 혼란 스럽습니다! 당신이 아는 당신은 이미 이해를 보여준 것 이상으로
에로스
인터페이스 사용 방법 중 하나의 좋은 예 ... 호출 프로세스 내에서 사용하려는 객체가 포함 된 DLL이 있다고 가정 해보십시오. DLL 경계를 넘어 객체를 전달할 수는 없지만, String의 멤버가 아닌 String을 WideString과 같이 사용하면 인터페이스도 전달할 수 있습니다. 그런 다음 DLL 내부의 객체를 인스턴스화하고 해당 객체의 인터페이스 참조를 DLL에서 다시 호출 응용 프로그램으로 전달합니다. 호출하는 응용 프로그램은 객체를 직접 호출하는 것과 같은 방법으로 해당 인터페이스와 상호 작용할 수 있습니다. –
@Jerry 그건 바이너리 interop 구현 문제가 더있어. 나는 인터페이스가 더 깊은 개념이라고 생각한다. –