Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
2-1248268660
Zalm
2009-07-22 17:17
2009.09.27
Прием сообщений данных сервером


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-1248938142
desc
2009-07-30 11:15
2009.09.27
Справочная и оперативная информация.


15-1248553808
Юрий
2009-07-26 00:30
2009.09.27
С днем рождения ! 26 июля 2009 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский