Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c