Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
3-43309
Hermes
2004-02-11 18:37
2004.03.14
Нужно добавить параметр в режиме выполнения программы!


3-43397
Pavel
2004-02-12 17:22
2004.03.14
Отображение memo в DBGrid


1-43524
Edu
2004-02-16 07:01
2004.03.14
Ввод функции на Delphi


1-43651
Vilux
2004-02-25 15:38
2004.03.14
Передача данных в dll


3-43386
Serj
2004-02-14 13:51
2004.03.14
Как отключить благодарность за выбор DBISAM





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