Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
ВнизКак абстрагироваться от типов свойств класса? Найти похожие ветки
← →
kostyl_kostyl (2009-07-23 14:23) [0]Скажите пожалуйста как абстрагироваться от типа свойств класса.
Например, есть класс А у которого есть свойства Р1 и Р2. Доступ к этим свойствам происходит через методы доступа которые обращаются к каким то закрытым данным. Я предполагаю что эти закрытые данные реализуются в виде класса с двумя свойствами. Причем таких класса два один со свойствами типа интегер, а другой с типом реал. В конструкторе класса А я задую как-то какие типы у его данных, инстанцируя соответствующий класс в закрытом свойстве. Не могу понять где надо делать перезагрузку и вообще как. Допустим есть абстрактный класс, который определяет методы доступа к данным скрытого класса. От него два класс с реал свойствами и интегер свойствами. А как в классе А это реализовать не пойму.
← →
Palladin © (2009-07-23 14:37) [1]
> Как абстрагироваться от типов свойств класса?
использовать Variant
← →
Alf (2009-07-23 14:43) [2]
> Как абстрагироваться от типов свойств класса?
использовать C++
← →
Bruth (2009-07-23 14:45) [3]Удалено модератором
Примечание: http://www.delphimaster.ru/forums.shtml#rule Запрещается: п.8
← →
kostyl_kostyl (2009-07-23 15:37) [4]мда, не густо...
← →
Palladin © (2009-07-23 15:40) [5]А что ты ожидал?
← →
kostyl_kostyl (2009-07-23 15:48) [6]
> А что ты ожидал?
Какой-то ООП прием или шаблон.
← →
clickmaker © (2009-07-23 15:55) [7]> Какой-то ООП прием или шаблон
а чем Variant не подходит? класс 1 вернет интегер, класс 2 - реал
← →
kostyl_kostyl (2009-07-23 16:00) [8]
> а чем Variant не подходит?
не хочу подключать...
← →
Kolan © (2009-07-23 16:04) [9]Я думаю вам пригодятся параметризованные классы, aka generics.
← →
clickmaker © (2009-07-23 16:04) [10]type MyVariant = record
IntVal: integer;
RealVal: Real;
end;
← →
kostyl_kostyl (2009-07-23 16:13) [11]
> type MyVariant = record
> IntVal: integer;
> RealVal: Real;
> end;
>
Ну так наверно буду пробовать...
← →
Kolan © (2009-07-23 16:26) [12]Я вот про что:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
THiddenData<T> = class
private
FData: T;
public
property Data: T read FData write FData;
end;
TA<T> = class
private
FHiddenData: THiddenData<T>;
function GetP: T;
procedure SetP(const Value: T);
public
constructor Create();
destructor Destroy; override;
property P1: T read GetP write SetP;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
TestI: TA<Integer>;
TestS: TA<String>;
begin
TestI := TA<Integer>.Create;
TestS := TA<String>.Create;
try
TestI.P1 := 10;
TestS.P1 := "Hello!";
ShowMessage(IntToStr(TestI.P1));
ShowMessage(TestS.P1);
finally
TestI.Free;
TestS.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
{ TA<T> }
constructor TA<T>.Create;
begin
FHiddenData := THiddenData<T>.Create;
end;
destructor TA<T>.Destroy;
begin
FHiddenData.Free;
inherited;
end;
function TA<T>.GetP: T;
begin
Result := FHiddenData.Data;
end;
procedure TA<T>.SetP(const Value: T);
begin
FHiddenData.Data := Value;
end;
end.
← →
kostyl_kostyl (2009-07-23 16:52) [13]Kolan ©
А, понял. Ну я не такой профан, чтобы знать, что в Делфи так можно делать. Спасибо.
← →
clickmaker © (2009-07-23 16:54) [14]в D7 еще нельзя
← →
kostyl_kostyl (2009-07-23 16:57) [15]Удалено модератором
Примечание: Создание пустых сообщений
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c