Delphi: общие определения классов, асинхронный новичок - PullRequest
0 голосов
/ 12 декабря 2018

Я приехал из Delphi 2007, использую это 7 лет и начал работать с RAD Studio Berlin на моем новом рабочем месте.Проекты, над которыми я работаю, используют много TDictionary, обобщенных коллекций, асинхронных ... и т. Д.Например, есть класс:

TMyBaseClass = class abstract(TObject)
private
...

end;

TNewClassGeneric<T: TMyBaseClass> = class(TMyAbstractSuperClass)
....

Так что же означает этот TNewClassGeneric?

Я все еще борюсь за эти новые вещи для меня.Любой указатель, который я могу прочитать больше об этих общих, словарных и асинхронных образцах программного кода?Спасибо

1 Ответ

0 голосов
/ 12 декабря 2018

Посмотрите на класс ниже (он должен скомпилироваться).Обратите внимание, что он просто использует родовой T и не определяет тип в определении своего свойства для MyValue.Это позволяет использовать его как целое число или строку в двух процедурах UseGenreicInt & UseGnericString, демонстрирующих, что он может делать.Вот сила дженериков.Вы можете определить класс для работы с данными, не зная заранее, с каким типом данных - int, string и т. Д. - вы будете иметь дело.

unit Sample.Generic;

interface

uses
  System.SysUtils, System.Variants, System.Classes, System.Generics.Collections, VCL.Dialogs;

type
  TSampleGeneric<T> = class
  protected
    FValue: T;
  public
    constructor Create(AValue: T);
    property MyValue: T read FValue write FValue;
  end;

procedure UseGenricString;
procedure UseGenricInt;

implementation

constructor TSampleGeneric<T>.Create(AValue: T);
begin
  FValue := AValue;
end;

procedure UseGenricInt;
var
  LSample: TSampleGeneric<Integer>;
begin
  LSample := TSampleGeneric<Integer>.Create(100);
  try
    ShowMessage(IntToStr(LSample.MyValue));
  finally
    LSample.Free;
  end;
end;

procedure UseGenricString;
var
  LSample: TSampleGeneric<String>;
begin
  LSample := TSampleGeneric<String>.Create('ATestString');
  try
    ShowMessage(LSample.MyValue);
  finally
    LSample.Free;
  end;
end;

end.
...