Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: 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 вся ветка

Текущий архив: 2004.03.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-43523
Alex-kosmonavt
2004-03-03 18:56
2004.03.14
JvGif.dcu


1-43563
Maverick
2004-02-27 16:11
2004.03.14
FastReport


3-43323
SasaR
2004-02-16 12:12
2004.03.14
TClientDataSet - нужны DLL


1-43579
Sphinx
2004-03-02 16:05
2004.03.14
Как закрять форму еще при её создании


3-43337
_Павел
2004-02-16 15:40
2004.03.14
Фильтр. по дате