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

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

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

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

Сообщение Alexander » 30.11.2006 03:20:17

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

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

Код: Выделить всё
{$MODE OBJFPC}
interface
  var
      f : LongInt;
  property
      p : LongInt read f;
implementation
end.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение mif » 30.11.2006 10:04:27

Я думал, что свойства это указатели на методы классов.
Т.е надо класс сначала создать класс, потом объявить пару методов (например в разделе privete). И в разделе Published описать с-во к-ое вызывало бы эти 2 метода.
Ну а в разделе implementation уже описать сами методы (к-ые были описаны в разделе privete).
А вообще надо посмотреть матчасть по ООП. (Фаронов например);
mif
новенький
 
Сообщения: 71
Зарегистрирован: 14.12.2005 10:09:27

Сообщение Sergei I. Gorelkin » 30.11.2006 15:22:10

В FPC зачем-то существуют глобальные property (зачем - я сам слабо понимаю). Работающий пример - это CommandLine в system.pp последних версий.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение mif » 30.11.2006 18:18:08

Надо заниматься своим ликбезом... Я не оч понимаю, зачем эти глобальные с-ва были введены в язык. Классов заглаза хватает + гораздо более мощный механизм.
Или я что-то не догоняю? :(
mif
новенький
 
Сообщения: 71
Зарегистрирован: 14.12.2005 10:09:27

Сообщение Alexander » 30.11.2006 21:33:54

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

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.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение shade » 30.11.2006 22:03:13

Почему бы не сделать проще
Код: Выделить всё
interface
function p : LongInt;
implementation
function p : LongInt;
begin
end;
end.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Alexander » 30.11.2006 22:33:43

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.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение SergKam » 30.11.2006 23:17:18

a так прокатит
property p : LongInt read fget write fset;
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru