Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Class Helper da Generic Collection Kullanma
#1
Class helper içerisinde Generic collection kullanımını bir örnek üzerinde göstermek istiyorum. Örneğimde With operatörüne benzer bir kullanımı TObject sınıfına Class helper ile implemente ettim. Bunu yaparken Generic collection kütüphanesinden yararlandım. Aşağıda oluşturduğum Class helper bulunmakta.

Class Helper :
  TDCObjectHelper = class helper for TObject
    procedure &With<T:Class>(Action:TProc<T>);
 end;
.
.
.
implementation

{ TDCObjectHelper }

procedure TDCObjectHelper.&With<T>(Action: TProc<T>);
begin
  Action(Self);
end;

TObject sınıfına &With adında bir procedure tanımlamış oldum. Bu procedure ye generic yardımı ile TObject ten türemiş istediğim herhangi bir sınıfı gönderip işlem yaptırabileceğim. Örnek kullanımı da şu şekildedir. Örneğim ADOQuery ye parametreli SQL cümlesi gönderip bu SQL'in henüz çalışmadan önceki parametreleri yazılmış halini almak.

  Memo1
   .&With<TMemo>
   (
     procedure(mm:TMemo)
     begin
       ADOQuery1
       .&With<TADOQuery>(
             procedure(ADO:TADOQuery)
             var SQLText : string;
             begin
               SQLText := 'SELECT * FROM USERS WHERE U_NAME=:U_NAME AND U_ID=:U_ID AND U_SURNAME=:U_SURNAME';

               ADO.SQL.Text := SQLText;
               ADO.ParamCheck := True;
               ADO
                 .Parameters
                   .&With<TParameters>
                   (
                   procedure(Pr:TParameters)
                   begin
                     Pr.ParamByName('U_NAME').Value := 'Hakan';
                     Pr.ParamByName('U_ID').Value := 123;
                     Pr.ParamByName('U_SURNAME').Value := 'UÇAR';

                     Pr
                       .ForEach
                       (
                         procedure(P:TParameter)
                         begin
                           mm.Lines.Add(P.Name +' : '+VarTypeAsText(p.Value.GetType));
                           SQLText := SQLText.Replace(':'+P.Name,P.Value.GetConvertVar);
                         end
                       );
                   end
                   );

               mm.Lines.Add('');
               mm.Lines.Add(SQLText);
             end
             );
     end
   );


Kodda görüldüğü gibi TObject sınıfından türemiş herhangi bir nesneyi bir anonim procedure'de kullanabiliyorum.

Sonuç:
5DLoPA.gif

Buradan kodlara ulaşabilirsiniz | Yandex Disk
WWW
Cevapla
#2
teşekkürler.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Interposer Class Nedir, Nasıl Kullanılır uparlayan 32 27.722 21-07-2024, Saat: 06:19
Son Yorum: uparlayan
  OOP : Polymorphism, Inherited Class uparlayan 19 15.617 14-05-2021, Saat: 22:46
Son Yorum: SimaWB
  Enumerated Type'lar için Record Helper Kullanımı uparlayan 4 3.968 21-06-2020, Saat: 15:14
Son Yorum: uparlayan
  Class Helper ile Listview Loop witalihakko 2 4.023 20-03-2017, Saat: 00:42
Son Yorum: witalihakko
  C++ Builder projesinde Delphi kullanma engerex 2 4.733 21-09-2016, Saat: 11:02
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi