20-08-2020, Saat: 14:55
Aşağıdaki şekilde bir yapı kurmaya çalışıyorum. Fakat derleyici hatalar veriyor.
Yapmak istediğim yapı şu şekilde
TTable sınıfını Generic olarak tanımlıyorum. Burada sorun yok. Bu Base sınıf üzerinden yeni sınıflar üreterek kullanıyorum. Örneğin TArac = class(TTable<TArac>), TStok = class(TTable<TStok>) gibi
Ben bu Generic TTable<T> sınıfı ufrmBase içinde kullanmak istiyorum. Fakat T nedir anlamıyorum diyor. Formu da Generic olarak(TfrmBase<T> = class(TForm)) yaptığımda da farklı hatalar alıyorum. Nasıl yol alabilirim.
Bu form yapısını Generics kullanmadan sorunsuz bir şekilde çalıştırıyorum. Bu Base formların üzerinde TfrmArac, TfrmAraclar gibi son katman formlarda mevcut. Fakat List sınıfı için sürekli olarak type cast kullanmak zorunda kalıyorum.
Bu durumu aşmak için Interface mi kullanmam gerekiyor? Bu durumu nasıl aşarım.
Yapmak istediğim yapı şu şekilde
TTable sınıfını Generic olarak tanımlıyorum. Burada sorun yok. Bu Base sınıf üzerinden yeni sınıflar üreterek kullanıyorum. Örneğin TArac = class(TTable<TArac>), TStok = class(TTable<TStok>) gibi
Ben bu Generic TTable<T> sınıfı ufrmBase içinde kullanmak istiyorum. Fakat T nedir anlamıyorum diyor. Formu da Generic olarak(TfrmBase<T> = class(TForm)) yaptığımda da farklı hatalar alıyorum. Nasıl yol alabilirim.
Bu form yapısını Generics kullanmadan sorunsuz bir şekilde çalıştırıyorum. Bu Base formların üzerinde TfrmArac, TfrmAraclar gibi son katman formlarda mevcut. Fakat List sınıfı için sürekli olarak type cast kullanmak zorunda kalıyorum.
Bu durumu aşmak için Interface mi kullanmam gerekiyor? Bu durumu nasıl aşarım.
_______________ | |=============> Input DB Form | |___ | | |=========> Input Form | | |___ | | | |======> Base Form |_____________| | | | | | |______________| | | | |______________| _______________ | |=============> Output DB Form | |___ | | |=========> Output Form | | |___ | | | |======> Base Form |_____________| | | | | | |______________| | | | |______________|
unit uTable; interface uses System.Classes, System.Generics.Collections; type TTable<T> = class private FList: TList<T>; FTableName: string; function GetTableName(): string; procedure SetTableName(ATableName: string); published constructor Create(pOwnerDatabase: TDatabase); virtual; destructor Destroy(); override; public property TableName: string read GetTableName write SetTableName; property List: TList<T> read FList; end;
unit ufrmBase; interface uses Winapi.Windows , Winapi.Messages , System.SysUtils , System.Classes , Vcl.Controls , Vcl.Forms , Vcl.StdCtrls , Vcl.Menus , System.Generics.Collections ; type TfrmBase = class(TForm) pnlBottom: TPanel; pnlMain: TPanel; btnAccept: TButton; btnDelete: TButton; btnClose: TButton; stbBase: TStatusBar; private FTable: TTable<T>; protected public constructor Create( AOwner: TComponent; AParentForm: TForm = nil; ATable: TTable<T> = nil; AFormMode: TInputFormMode = ifmNone; AFormDecimalMode: TFormDecimalMode = fomNormal; AFormViewMode: TInputFormViewMode = ivmNormal; AAcceptBtnDoAction: Boolean = True);reintroduce;overload; end; constructor TfrmBase.Create( AOwner: TComponent; AParentForm: TForm; ATable: TTable<T>; AFormMode: TInputFormMode; AFormDecimalMode: TFormDecimalMode; AFormViewMode: TInputFormViewMode; AAcceptBtnDoAction: Boolean); begin FWithCommitTransaction := True; FWithRollbackTransaction := True; FParentForm := AParentForm; FFormMode := AFormMode; FFormViewMode := AFormViewMode; FFormDecimalMode := AFormDecimalMode; FTable := ATable; FAcceptBtnDoAction := AAcceptBtnDoAction; inherited Create(AOwner); end;
PostgreSQL - Linux - Delphi, Poliüretan