Глобальные свойства

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Глобальные свойства

Сообщение Alexander »

Как их надо декларировать правильно ?

Так не компилируется:

Код: Выделить всё

{$MODE OBJFPC}
interface
  var
      f : LongInt;
  property
      p : LongInt read f;
implementation
end.
mif
новенький
Сообщения: 71
Зарегистрирован: 14.12.2005 09:09:27

Сообщение mif »

Я думал, что свойства это указатели на методы классов.
Т.е надо класс сначала создать класс, потом объявить пару методов (например в разделе privete). И в разделе Published описать с-во к-ое вызывало бы эти 2 метода.
Ну а в разделе implementation уже описать сами методы (к-ые были описаны в разделе privete).
А вообще надо посмотреть матчасть по ООП. (Фаронов например);
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

В FPC зачем-то существуют глобальные property (зачем - я сам слабо понимаю). Работающий пример - это CommandLine в system.pp последних версий.
mif
новенький
Сообщения: 71
Зарегистрирован: 14.12.2005 09:09:27

Сообщение mif »

Надо заниматься своим ликбезом... Я не оч понимаю, зачем эти глобальные с-ва были введены в язык. Классов заглаза хватает + гораздо более мощный механизм.
Или я что-то не догоняю? :(
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

А фиг их знает, может когда то и удобно будет.
Раз есть, надо попробовать.

A global block can declare properties, just as they could be defined in a class.
The difference is that the global property does not need a class instance:
there is only 1 instance of this property. Other than that, a global property
behaves like a class property. The read/write specifiers for the global property
must also be regular procedures, not methods.


The concept of a global property is specific to Free Pascal, and does not exist in Delphi.
The concept of a global property can be used to 'hide' the location of the value, or to
calculate the value on the fly, or to check the values which are written to the property.


Кажется я понял в чём дело.
1. Они могут быть только в юнитах (не в программах)
2. read write только для процедур/функций - переменные не проходят. Нехорошо.
3. {$MODE OBJFPC} (как в документации) не обязательна MODE FPC тоже проходит.

Так собирается:

Код: Выделить всё

interface
function a : LongInt;
  property
      p : LongInt read a;
implementation
function a : LongInt;
begin
end;
end.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Почему бы не сделать проще

Код: Выделить всё

interface
function p : LongInt;
implementation
function p : LongInt;
begin
end;
end.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

shade, не уподобляйся американцам :)

Код: Выделить всё

unit testgpsh;

interface

  var
      f : LongInt;

function a : LongInt;
procedure b(Value: LongInt);

  property
      p : LongInt read a write b;

implementation

function a : LongInt;
begin
Exit(f);
end;

procedure b(Value: LongInt);
begin
f := Value;
WriteLn('Переменной F было присвоено значение: ', f);
end;

initialization
f := 0;
end.


Код: Выделить всё

uses testgpsh;

begin

p := 10;

end.
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

a так прокатит
property p : LongInt read fget write fset;
Ответить