Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работает class function? 
:(
    Опции темы
Гость05
Дата 26.10.2005, 16:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет, All!

Код

type
  TfmMyForm = class(TMyRootForm)
...
public
   property myProperty: TmyProperty read FmyProperty;
   class function GetFlag: integer; override;
...

class function TfmMyForm.GetFlag: integer;
begin
  if myProperty then
    Result := 1
  else
    Result := 2;
end;



как из class function обратиться к property myProperty, у меня строку
Код

if myProperty then

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

Спасибо
  Вверх
Rennigth
Дата 26.10.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



class function это меиод класса который ты можешь использовать не создавая самого объекта, например Constructor что-то типа class function. Но ты не можешь обращаться с методам этого класса из class function. Это конечно своими словами... smile, кто даст квалифицированнцю информацию сам с удовольствием почитаю.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rrader
Дата 27.10.2005, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Class Function - это методы класса, которые можно вызвать без создания экземпляра объекта. Соответственно, при вызове методов класса поля объекта еще не созданы, поэтому свойства будут недоступны.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
<Spawn>
Дата 27.10.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



class function это статический метод класса, создаваемый в единственном экзмепляре, независимо от количество экземпляров классов(их может вообще не быть). Попросту говоря, это функция(процедура), спрятаная в области видимости класса, т.е. доступ к ней можно получить лишь так:

<Название класса>.<статический метод>


Чтобы в твоем случае обратиться к myProperty тебе нужно в статический метод передать укзатель на экземпляр твоего класса, т.к. GetFlag ни чего не знает об этом экземпляре smile Хотя смысла в этом не много, но код был бы таков:

Код

type
  TfmMyForm = class(TMyRootForm)
...
public
   property myProperty: TmyProperty read FmyProperty;
   class function GetFlag: integer; override;
...

class function TfmMyForm.GetFlag(fmMyFormInstance: TfmMyForm): integer;
begin
  with fmMyFormInstance do
    if myProperty then
      Result := 1
    else
      Result := 2;
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.