Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Вниз

Как понять такой Record?   Найти похожие ветки 

 
Zergling   (2003-05-14 11:24) [0]

Здрасть всем!Как понять такой Record в модуле System.pas. По хелпу как то не очень врубился.

PVariantManager = ^TVariantManager;
{$EXTERNALSYM PVariantManager}
TVariantManager = record
VarClear: procedure(var V : Variant); <<< ???
....
end deprecated;
{$EXTERNALSYM TVariantManager}


 
MBo   (2003-05-14 12:36) [1]

Если я правильно понимаю, то см. процедурные типы в хелпе


 
АлексейК   (2003-05-14 13:20) [2]

А что разве в качетсве поля не может быть процедурный тип?


 
Mike Kouzmine   (2003-05-14 13:29) [3]

Я где-то читал, или приснилось, что в рекорде можно и процедурки вставлять, не только процедурные типы, как в классы, и что грань между рекордом и классом стремительно стирается.


 
Digitman   (2003-05-14 13:32) [4]

тоже самое и здесь :

PMemoryManager = ^TMemoryManager;
TMemoryManager = record
GetMem: function(Size: Integer): Pointer;
FreeMem: function(P: Pointer): Integer;
ReallocMem: function(P: Pointer; Size: Integer): Pointer;
end;

да мало ли таких деклараций в сист.модулях ! и не в системных - тоже) ... мало ли вообще диспетчерских структрур существует !)

непонятно, в чем, по мнению автора, проявляется нонсенс)


 
Digitman   (2003-05-14 13:37) [5]


> Mike Kouzmine


насчет "процедурки вставлять" - это тебе приснилось)


 
Anatoly Podgoretsky   (2003-05-14 13:39) [6]

Ну нонсенса у него нет, наблюдается непонимание процедурных типов.


 
Mike B.   (2003-05-14 13:43) [7]

> Mike Kouzmine © (14.05.03 13:29)
Процедурки это врядли, конечно, но при наличии полей процедурного типа не хватает только механизма наследования


 
Digitman   (2003-05-14 13:46) [8]


> Anatoly Podgoretsky


а чего там понимать-то ?)

объявление поля процедурного типа - просто объявление указателя)


 
Palladin   (2003-05-14 13:48) [9]

ну не сталкивался он с этим еще, а книжки не читает...
что делать, конечно в форуме спросить


 
АлексейК   (2003-05-14 13:51) [10]

>Mike B.
А разве понятие класса
ограничивается полем да наследованием.


 
Mike B.   (2003-05-14 13:58) [11]

> АлексейК (14.05.03 13:51)
Конечно если строго подходить, то класс все равно не получится, но в некоторой степени полученная структура могла бы его заменить (правда все равно непонятно зачем :)


 
Anatoly Podgoretsky   (2003-05-14 14:00) [12]

Для организации наприме колбак функций, в класса это события.


 
Mike B.   (2003-05-14 14:02) [13]

> Anatoly Podgoretsky © (14.05.03 14:00)
вообще да действительно


 
Zergling   (2003-05-15 08:00) [14]

День добрый всем! Извеняйте, что отвечаю с такой задержкой.

Anatoly Podgoretsky © (14.05.03 13:39)
> Ну нонсенса у него нет, наблюдается непонимание процедурных типов.
Выразимся точнее - незнание т.к. с ними не сталкивался и не слыхивал о них.

Palladin © (14.05.03 13:48)
> ну не сталкивался он с этим еще, а книжки не читает...
Книги очень даже читаю, но т.к. подобного в свих книгах не нашел, то как ты верно выразился
> что делать, конечно в форуме спросить

Ну своял кое что простое

type
TMyProc = record
n: procedure (S: String);
end;

Procedure kkk(S: String);
begin
MessageDlg(S, mtInformation, [mbOK], 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var V: TMyProc;
begin
v.n := kkk;
v.n("sss");
end;

Теперь у меня возник вопрос. Какая выгода использования такого подхода (т.е. в каких случаях и для каких целей используется)? Если кого не затруднит киньте простенький примерчик , чтобы лучше понять использование всего этого (или киньте ссылочку пожалуйста, где я мого просветиться на эту тему).
Всетаки интересно мне, что это такое, как и для чего это используют.


 
Думкин   (2003-05-15 08:11) [15]

У... как все запущено.
да много.
А интегралы брать?
Ты ему функцию и границы - он тебе ответ.
А функции рааазные бывают. Но одно ... они все одного типа.
Это для начала.


 
Zergling   (2003-05-15 08:52) [16]

Думкин © (15.05.03 08:11)
> У... как все запущено.
К примеру ведь привел.
Вопрос в большей степени ведь
> Какая выгода использования такого подхода


 
uw   (2003-05-15 08:57) [17]

В Дельфях это очень широко используется для описания событий. Посмотри, например,

TNotifyEvent = procedure(Sender: TObject) of object;

в Classes.

Каждый раз, когда ты назначаешь некоторое событие компоненту, ты пользуешься этим механизмом.
Как это все работает? Пусть у компонента есть поле

FOnChange: TNotifyEvent;

По сути - это адрес метода. Где-то компонент делает так:

if Assigned(FOnChange) then
FOnChange(Self);

Т.е. если ты задал обработчик события OnChange, то делается косвенный вызов FOnChange(Self), иначе не делается.


 
Думкин   (2003-05-15 09:11) [18]


> Zergling © (15.05.03 08:52)

Я тебе для начала и ответил.
Твоя процедура не знает интегрируемую функцию - ты ее передаешь при обращении. Удобно?


 
uw   (2003-05-15 09:20) [19]

>Zergling © (14.05.03 11:24)

Использование косвенных адресов в структурах типа приведенной тобой в первом посте - это наследие дообъектноориентированного программирования. Смысл следующий.

Пусть у тебя есть некоторая сущность, описанная в некотором модуле. Пусть вне модуля она описывается данными и действиями, которые она умеет производить. Все это собирается вместе в одной структуре: данные описываются переменными, действия - адресами подпрограмм, возможно, реализованных в этом модуле. Разработчик может переопределить действие сущности, написав в другом модуле свою подпрограмму и задав ее адрес в видимой ему структуре.

Сейчас для таких целей лучше использовать виртуальные методы. Но и старый способ тоже хорош, что и демонстрирует Delphi.


 
Zergling   (2003-05-15 09:20) [20]

А как правельней будет? Не затруднит примерчик кинуть?


 
Zergling   (2003-05-15 09:24) [21]

Zergling © (15.05.03 09:20)
> А как правельней будет? Не затруднит примерчик кинуть?
Это я к Думкин © (15.05.03 09:11)


 
Думкин   (2003-05-15 09:33) [22]

F1=FUNCTION(T:EXTENDED):EXTENDED;

FUNCTION INTG(A,B,EPS:EXTENDED;FF:F1):EXTENDED;
VAR K:SHORTINT;
H,N1,S,S1,D,E:EXTENDED;
BEGIN
H:=B-A;
S1:=0;
E:=200;
WHILE E>EPS DO
BEGIN
S:=0;
H:=H/2;
D:=A;
REPEAT
FOR K:=1 TO 8 DO S:=S+YINT[K]*FF(D+H*XINT[K]);
D:=D+H;
UNTIL NOT(D<B-H/2);
N1:=H*S+0.0001;
E:=ABS((N1-S1)/n1);
S1:=N1;
{GOTOxy(10,21);
WRITELN(S," ",H," ",E);}
END;
INTG:=S1;
END;


 
uw   (2003-05-15 09:51) [23]

Я еще подумал и понял, что виртуальный метод напрямую не может заменить косвеннй вызов в тех случаях, когда нам требуется переназначать действия в процессе выполнения.



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

Форум: "Потрепаться";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
4-3206
maxi
2003-04-03 16:46
2003.06.02
Что такое Progman ?


1-2924
_Narayan_
2003-05-17 22:25
2003.06.02
DLL


9-2735
VikKo
2002-12-17 22:54
2003.06.02
Дым, взрывы и fps


1-2910
rom
2003-05-22 23:26
2003.06.02
Сортировка массива


1-2984
Calm
2003-05-21 14:48
2003.06.02
Создание COM-объекта





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский