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

Вниз

класс TString   Найти похожие ветки 

 
C55   (2004-08-17 14:59) [0]

В своё время возникла необходимость в написание такого класса:

 TString = class
  private
   FData:string;
   function GetData:string;
   procedure SetData(AData:string);
  public
   property Data:string read GetData write SetData;
   constructor Create(AData:string);
 end;

implementation

var S:TString;

constructor TString.Create(AData:string);
begin
SetData(AData);
end;

function TString.GetData:string;
begin
Result:=FData;
end;

procedure TString.SetData(AData:string);
begin
Pointer(FData):=nil;
FData:=AData;
end;

При созданиии нового объекта, конструктором Create (вызывет метод SetData), и последующем доступе к свойству Data - всё в порядке.
Однако, при изменении свойства Data (вызывает тот же метод SetData), всё проходит успешно, но если потом обратиться S.Data, то получаю прежнее значение (указанное при создании объекта), т.е.

S:=TString.Create("aaa");
ShowMessage(S.Data); {"aaa"}
S.Data:="bbb";
ShowMessage(S.Data); {"aaa"}

А если в процедуре SetData убрать Pointer(FData):=nil, то при присваивании сыпется Access Violantion.

В чём дело?? Что не так? Самое интересное, что это вроде работало (я это писал давно), но потом перестало. Что и где я мог сломать?


 
Digitman ©   (2004-08-17 15:06) [1]

потому что ерундистикой занялся

куда уж проще :

procedure TString.SetData(AData:string);
begin
FData:=AData;
end;


 
Anatoly Podgoretsky ©   (2004-08-17 15:09) [2]

Никакой новой функциональности по отношению с string не наблюдается, кроме лишних вызовов и перерасхода памяти. Особенно на методе GetData


 
TUser ©   (2004-08-17 15:09) [3]

У меня нормально все работает, вне зависимости от того, заремил я или нет. На самом деле непонятно, зачем нужно
Pointer(FData):=nil,
равно как зачем нужен такой класс.


 
C55   (2004-08-17 15:09) [4]

Я ж говорю, тогда будет ACCESS VIOLANTION, при любом присваивании!
Хоть я

procedure TString.SetData(AData:string);
begin
FData:="ds,ajdklas";
end;

напишу.


 
TUser ©   (2004-08-17 15:10) [5]

Не будет


 
Digitman ©   (2004-08-17 15:11) [6]


> C55   (17.08.04 15:09) [4]
> Я ж говорю, тогда будет ACCESS VIOLANTION, при любом присваивании!


чушь городишь


 
C55   (2004-08-17 15:12) [7]

Тогда вызывайте дурку..
Ну так и есть, блин.


 
Digitman ©   (2004-08-17 15:20) [8]


> Тогда вызывайте дурку


уже ... не уходи никуда, жди ... позвонят в дверь


 
Ega23 ©   (2004-08-17 15:25) [9]

Ну так и есть, блин.

А создаёшь ли ты её, приятель?  :о)


 
Думкин ©   (2004-08-18 06:50) [10]

И тишина.


 
KSergey ©   (2004-08-18 07:17) [11]

Ну так позвонили, видимо :(



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
14-1092572756
YurikGL
2004-08-15 16:25
2004.09.05
Черный список вредоносных программ


14-1092311245
able
2004-08-12 15:47
2004.09.05
Ожоги. Как бороться.


3-1092376581
segor
2004-08-13 09:56
2004.09.05
Проверка поля на обязательность


3-1092042786
Lizka
2004-08-09 13:13
2004.09.05
Как грамотно закрыть базу данных?


1-1092927783
makssim
2004-08-19 19:03
2004.09.05
Как запретить вводить в комбобокс польз. данные?