در ضمن در خود interface Isum از وجود کلمه virtual خطا میگیره.
استفاده از متد virtual در Interface بی معنی هست!
مشکل اینجاست که همچین تعریفی در دلفی مجاز نیست و من حتما یه چنین پیاده سازی رو می خوام.
متد Add در کد زیر توسط IMyInterface تعریف شده و توسط TMyClass1 (برای نوع string) و TMyClass2(نوع integer) پیاده سازی شده. تعداد پارامترهای ورودی و نوع آنها و نوع پارامتر خروجی نامشخص هست:
interface
type
IMyInterface = interface
procedure Add(Args: array of const; var Output: variant);
end;
TMyClass1 = class(TInterfacedObject,IMyInterface)
//Aggrigate some string variables
procedure Add(Data: array of const; var Output: variant);
end;
TMyClass2 = class(TInterfacedObject,IMyInterface)
//Add some integer numbers
procedure Add(Data: array of const; var Output: variant);
end;
implementation
{ TMyClass1 }
procedure TMyClass1.Add(Data: array of const; var Output: variant);
var
i : integer;
begin
try
for i := 0 to High(Data) do
case Data[i].VType of
vtAnsiString : Output := Output + string(Data[i].vAnsiString);
vtChar : Output := Output + Data[i].VChar;
end; //case
except
Output := '';
end;
end;
{ TMyClass2 }
procedure TMyClass2.Add(Data: array of const; var Output: variant);
var
i : integer;
begin
try
for i := 0 to High(Data) do
Output := Output + Data[i].VInteger;
except
Output := -1;
end;
end;
مثال:
procedure TForm1.Button1Click(Sender: TObject);
var
Output : variant;
MyClass1 : IMyInterface;
begin
MyClass1 := TMyClass1.Create;
MyClass1.Add(['a','b','cj','0'],Output );
ShowMessage(Output);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Output : variant;
MyClass2 : IMyInterface;
begin
MyClass2 := TMyClass2.Create;
MyClass2.Add([1,2,3,4,5],Output);
ShowMessage(IntToStr(integer(Output 1;));
end;