Я новичок в дженериков, и нуждаются в помощи, чтобы структурировать класс и методы, реализующие - Delphi 2010.Структура Delphi Обобщения Класс
Я пытаюсь использовать генерики сериализовать ЛЮБУЮ TObject JSON ... Я хочу быть способный повторно использовать код.
Мои вопросы заключаются в следующем:
Как создать конструктор дженериков? Я хочу иметь возможность использовать Self или Default (T), но он просто возвращает nil.
V: = Marshal.Marshal (ReturnObject) ... Этот метод требует TObject, но я не знаю, как ссылаться на текущий объект, который был передан в
Кроме того, Как я могу использовать. это внутри метода - см. ниже в Q3
Любые другие комментарии оценены.
/////////////////////////////////////////// ////////////////////
TFileOperationResult = class(TObject)
private
FSuccess: Boolean;
//Error: PException;
FLastError: Integer;
function GetFailure: Boolean;
property Failure: Boolean read GetFailure;
public
property Success: Boolean read FSuccess write FSuccess;
property LastError: Integer read FLastError write FLastError;
end;
TResponseObject<T: class> = class(TObject)
private
FReturnObject: T;
function GetReturnObject: T;
function BaseStringsConverter(Data: TObject): TListOfStrings;
public
constructor Create; overload;
property ReturnObject: T read GetReturnObject;
procedure Serialize;
end;
constructor TResponseObject<T>.Create;
begin
// Question 1 - What should go in here?
end;
function TResponseObject<T>.GetReturnObject: T;
begin
Result := Default(T);// Is this correct?
end;
procedure TResponseObject<T>.Serialize;
var
Marshal: TJSONMarshal;
V: TJSONValue;
begin
Marshal := TJSONMarshal.Create(TJSONConverter.Create);
Marshal.RegisterConverter(TResponseObject<T>, BaseStringsConverter);
V := Marshal.Marshal(ReturnObject); // Question 2 - How Can I refer to 'Self'?
OutPut := V.ToString;
Marshal.Free;
end;
/////////////////////// ////////////////////////////////////////
procedure TForm1.Test;
var
FileOperationResult: TResponseObject<TFileOperationResult>;
begin
FileOperationResult := TResponseObject<TFileOperationResult>.Create;
FileOperationResult.Serialize;
end;
// ВОПРОС 3
procedure TForm1.MoveCopyFile<THowNowResponse>(ASource, DDestination: String);
var
FileOperationResult: TFileOperationResult;
begin
FileOperationResult := TFileOperationResult.Create;
// What to do?
end;
Это действительно сложно понять, что вы хотите ... Я думаю, что лучше писать отдельные вопросы, потому что кажется, что у вас разные проблемы и вы пытаетесь решить их все здесь. Для общей части ... JSON Marshaler способен сортировать любой класс, поэтому я не уверен, хотите ли вы создать универсальный класс, чтобы использовать его в качестве обертки для маршалирования любого объекта, используя только TJsonConverter по умолчанию или что (возможно имя класса TResponseObject делает его неясным для меня). – jachguate