मैं निक होजेस की पुस्तक "डेल्फी में कोडिंग" पढ़ रहा हूं और मैं इंटरफ़ेस उपयोग को समझने की कोशिश कर रहा हूं। एक इकाई में मैं asimple इंटरफ़ेस डाल दिया है:डेल्फी इंटरफेस को समझने का प्रयास करें
unit INameInterface;
interface
type
IName = interface
['{CE5E1B61-6F44-472B-AE9E-54FF1CAE0D70}']
function FirstName: string;
function LastName: string;
end;
implementation
end.
और मैं इस इंटरफ़ेस के कार्यान्वयन डाल दिया है एक और इकाई में, पुस्तक नमूने के साथ अनुसार:
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 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.
मेरा प्रश्न यह है: मैं इंटरफ़ेस का उपयोग कैसे कर सकता हूं? दो funcions संरक्षित के रूप में घोषित कर रहे हैं तो मैं उन्हें फार्म से कैसे उपयोग कर सकते हैं? मुझे उन्हें सार्वजनिक रूप से परिभाषित करना है, या मुझे INameInterface इंटरफ़ेस इकाई का उपयोग करना चाहिए? मैं इंटरफेस के बारे में बहुत उलझन में हूँ !!!
एरोस
इंटरफेस का उपयोग कैसे किया जाता है इसका एक बड़ा उदाहरण ... मान लीजिए कि आपके अंदर एक ऑब्जेक्ट के साथ एक डीएलएल है जिसे आप कॉलिंग प्रक्रिया के भीतर से भी उपयोग करना चाहते हैं। आप डीएलएल सीमाओं में ऑब्जेक्ट्स को पास नहीं कर सकते हैं, लेकिन आप इंटरफेस पास कर सकते हैं (जब तक इसके सदस्य भी सुरक्षित हैं, जैसे स्ट्रिंग के बजाए वाइडस्ट्रिंग)। फिर, आप डीएलएल के अंदर ऑब्जेक्ट को तुरंत चालू करते हैं, और उस ऑब्जेक्ट का इंटरफ़ेस संदर्भ डीएलएल से कॉलिंग ऐप पर वापस भेजते हैं - फिर कॉलिंग ऐप उसी इंटरफ़ेस से उसी तरह से इंटरैक्ट कर सकता है जैसे कि आप ऑब्जेक्ट को सीधे कॉल कर रहे हैं। –
@ जेरी बाइनरी इंटरऑप के साथ एक कार्यान्वयन मुद्दा है। मुझे लगता है कि इंटरफेस एक गहरी अवधारणा है। –