powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Helper для свойства типа String
6 сообщений из 6, страница 1 из 1
Helper для свойства типа String
    #39858649
niggafckr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть следующий хелпер:

Код: pascal
1.
2.
3.
TStringHelper = record helper for String
  procedure add(str: string); inline;
end;



И есть класс "myClass" со свойством

Код: pascal
1.
property a: String read FA write setA;



Метод "setA()" делает такое:

Код: pascal
1.
2.
3.
4.
procedure TMyClass.setA(a: String);
begin
  showMessage(a);
end;



И если вызвать хелпер "add()" для этого свойства, то "showMessage()" не сработает, но значение запишется в поле напрямую:

Код: pascal
1.
2.
myObj.a := 'Моя ';
myObj.a.add('строка');



Здесь "showMessage()" вызывается только единожды. Почему так происходит?
...
Рейтинг: 0 / 0
Helper для свойства типа String
    #39858651
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
niggafckr,

Код: pascal
1.
myObj.a.add('строка');



Тут работает только геттер а не сеттер и геттер сразу.

А значение 'a' у тебя меняется только потому что там идет работа по указателю.
...
Рейтинг: 0 / 0
Helper для свойства типа String
    #39858654
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит сделать нормальный геттер твой код перестанет работать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
program Project11;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TStringHelper = record helper for String
    procedure add(str: string);
  end;

  TXXX = class
  private
    FA: String;
    function getA: String;
    procedure setA(const Value: String);
  published
    property a: String read getA write setA;
  end;


{ TStringHelper }

procedure TStringHelper.add(str: string);
begin
  Self:=Self+#13#10+Str;
end;

{ TXXX }

function TXXX.getA: String;
begin
  Result := FA;
  WriteLn('Get:'+FA);
end;

procedure TXXX.setA(const Value: String);
begin
  FA := Value;
  WriteLn('Set:'+FA);
end;

var
  X : TXXX;

begin
  x:=TXXX.Create;
  WriteLN('----- Set A directly------');
  x.a:='123';
  WriteLN('----- "Set" A through helper ------');
  x.a.add('456');
  WriteLN('----- Get result ------');
  WriteLN(x.a);

  ReadLn;
end.



Код: plaintext
1.
2.
3.
4.
5.
6.
----- Set A directly------
Set:123
----- "Set" A through helper ------
Get:123
----- Get result ------
Get:123
123
...
Рейтинг: 0 / 0
Helper для свойства типа String
    #39858656
niggafckr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, со свойствами такие хелперы работать не заставишь?
...
Рейтинг: 0 / 0
Helper для свойства типа String
    #39858663
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как это делаешь ты - нет.
...
Рейтинг: 0 / 0
Helper для свойства типа String
    #39858672
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
niggafckrТо есть, со свойствами такие хелперы работать не заставишь?Всё прекрасно работает как и должно. Проблема в твоей интерпретации этой логики
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Helper для свойства типа String
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]