Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.27;
Скачать: CL | DM;

Вниз

Как абстрагироваться от типов свойств класса?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
15-1248640205
Юрий
2009-07-27 00:30
2009.09.27
С днем рождения ! 27 июля 2009 понедельник


15-1248898607
LDV
2009-07-30 00:16
2009.09.27
Должность "инженер-программист" - это Software Engineer?


4-1217571568
mistic
2008-08-01 10:19
2009.09.27
непростое контекстное меню


15-1248669050
brother
2009-07-27 08:30
2009.09.27
Что с основной веткой?


2-1248034498
tcler
2009-07-20 00:14
2009.09.27
Как организовать scripting host плагин на делфи?