Вниз
Скачать: CL | DM;

Class var virtual в Delphi 8   Найти похожие ветки 

← →
Serginio666   (2004-03-02 14:34) [0]

Delphi для каждого класса создает метакласс
http://www.rsdn.ru/Forum/Message.aspx?mid=548308&only=1
Интерено было бы использовать не только виртуальные статические функции но и переменные, т.к. они являлись бы переменными метакласса и переопределялись например в конструкторе типа, но конструкция
Class var virtual не работает. Может кто знает выход.


← →
Vuk ©   (2004-03-02 14:46) [1]

А class property + виртуальные методы доступа?


← →
icWasya ©   (2004-03-02 14:48) [2]

Варианта два -
1) - в секции implementation завести кучу переменных и использовать их в методах
2) - есть такая фича - типизированные константы внутри процедур на самом деле являются статическими переменными


← →
Serginio666   (2004-03-02 14:50) [3]

Это несколько не то. Просто для каждого класса может быть некий набор данных и желательно работать с ними как с обычными переменными и изменяя их. А так придется жестко прописывать значения в виртуальный статический метод.
Таже ситуаци и с атрибутами. Но может как то в метакласс можно прописать???


← →
Serginio666   (2004-03-02 14:55) [4]

-> icWasya © (02.03.04 14:48) [2]
Это все понятно, но несколько не красиво. Прелесть мета классов, что они генерятся автоматически и поддерживают наследование. Сам язык от этого очень выигрывает.


← →
Vuk ©   (2004-03-02 14:59) [5]

Если не ошибаюсь, то:
1. через метакласс можно обращаться к class property
2. class property может обращаться к переменным класса.
Это не то что Вам нужно? Если нет, то тогда что?

И что Вы подразумеваете под "Class var virtual"?


← →
Serginio666   (2004-03-02 15:10) [6]

Не совсем так. Например имею я некий класс и его наследники. Есть статические данные, но переопределяемые в наследниках.
Причем эти данные относятся к классу а не к экземплярам типа.
Но не виртуальные статические переменные одни и теже для всех типов.
Конечно я могу
для каждого класса заводить синглетон с данными переменными и через статический виртуальный метод передавать его но это не красиво.
А вот если их переопределять в метаклассах ("Class var virtual")
то они будут хранится там, и их можно переопределять. Причем видимость их будет как и у статических переменных только браться из экземпляра метакласса.


← →
Vuk ©   (2004-03-02 15:20) [7]

Вы тогда так и говорите, что интересует, как завести переменную класса в классе, который генерируется для поддержки метаклассов.
Я не знаю, можно ли с этим что-то сделать, поскольку как-то обратиться к такому классу скорее всего не позволит синтаксис (из-за "@" в имени). Иначе можно было бы попробовать определить для такого класса helper, где и определить переменную класса.


← →
Serginio666   (2004-03-02 15:38) [8]

Обратится то он позволит, тем или иным способом, но суть то не в том. Если ты внимательно читал мою ссылку то все статические виртуальные методы прописываются в мета классе,
и TMyClass.VirtStaticMetod приводи на самом деле к вызову
@MetaMyClass.VirtStaticMetod.
То же самое возможно и с виртуальными статическими переменными


← →
Vuk ©   (2004-03-02 15:49) [9]

>То же самое возможно и с виртуальными статическими переменными
"виртуальные статические переменные" - это Ваша выдумка?


← →
Serginio666   (2004-03-02 16:02) [10]

Не виртуальные статические методы это нормально, а вот
"виртуальные статические переменные" что то их области Фантастики???
Или данный подход нельзя реализовать. Вся почва под них подготовлена.


← →
Тимохов ©   (2004-03-02 16:19) [11]


> Serginio666 (02.03.04 16:02) [10]

Сам активно использую class function и class procedure. В д6 переменным метакласса я реализовал свою замену. Под implementation храню пременные и даю к ним доступ через class function и class procedure.

Хотя меня тоже удивляло всегда, почему не сделаны переменные метакласса. Если подумать, наверное, этому можно найти объяснение.


← →
Serginio666   (2004-03-02 16:45) [12]

С точки зрения Native то там все через VMT , в Net там метаклассы ассоциированные с типом, и в том и в другом случае переменные метакласса легко сделать.
По всей вероятности это не сделано для упрощения восприятия и возможно для защиты от разбухания данных. Так как в других языках этого просто нет (Pithon вроде есть)
Других объяснений нет



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.019 c
1-43574
Delph
2004-02-27 16:29
2004.03.14
Alignment и TEdit


3-43394
Night Cold
2004-02-13 18:09
2004.03.14
BatchMove


7-43900
Sashoks
2003-12-24 03:10
2004.03.14
Модель винчестера


14-43850
Кен
2004-02-20 05:16
2004.03.14
А не проголосовать ли за Малышкина ? По приколу. Он смешной.


14-43881
NeyroSpace
2004-02-20 20:32
2004.03.14
ПОМОГИТЕ! Домой не пускают! Не проходит проверка синтаксиса




   Наверх