Tôi đã viết một hàm chấp nhận loại lớp (T) và loại giao diện (I) và trả về một giao diện (I) cho đối tượng (T). Đây là mã.Sử dụng Generics để tạo một đối tượng giao tiếp
interface
function CreateObjectInterface<T: Class, constructor; I: IInterface>(
out AObject: TObject): I;
...
implementation
function TORM.CreateObjectInterface<T, I>(out AObject: TObject): I;
begin
AObject := T.Create;
if not Supports(AObject, GetTypeData(TypeInfo(I))^.Guid, Result) then
begin
AObject.Free;
AObject := nil;
raise EORMUnsupportedInterface.CreateFmt(
'Object class "%s" does not support interface "%s"',
[AObject.ClassName, GUIDToString(GetTypeData(TypeInfo(I))^.GUID)]
);
end;
end;
Chức năng hoạt động như dự kiến không có rò rỉ bộ nhớ hoặc virus chẳng ai ưa khác.
Có cách nào khác để đạt được kết quả tương tự không?
Tôi không chắc rằng điều này câu hỏi là thích hợp ở đây. Có lẽ xem xét mã sẽ là một trang web tốt hơn. Câu hỏi cuối cùng của bạn chắc chắn là dựa trên ý kiến. Hai câu hỏi đầu tiên. 1. Có, điều này là OK. 2. Không, không có vấn đề gì. –
Đặt lại câu hỏi cuối cùng thành "có cách nào khác để đạt được kết quả tương tự không?" –
@LURD - Tôi đã lặp lại câu hỏi – norgepaul