Konuyu Paylaş : facebook gplus twitter

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

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kodlara ulaşabilirsiniz | Yandex Disk
WWW
Cevapla
#2
teşekkürler.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Class Helper ile Listview Loop witalihakko 2 669 20-03-2017, Saat: 00:42
Son Yorum: witalihakko
  C++ Builder projesinde Delphi kullanma engerex 2 1.743 21-09-2016, Saat: 11:02
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi