Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 123

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте! Есть вопрос. Почитал учебники по Дельфи на разных сайтах: статическим называется метод объявленный с ключевым словом class и, в отличие от НЕСТАТИЧЕСКОГО метода, может быть вызван без конструирования объекта вот так:

  type TMyClass = class class procedure MyProcedure; end; end; var i : integer; begin TMyClass.MyProcedure; end;
Получается, метод вызываемый посредством создания объекта нестатический?! Причем, тут же ниже: "все методы Delphi по умолчанию статические". Как же так? Ведь только что написали, что МЕТОД ЭКЗЕМПЛЯРА НЕстатический! Очень надеюсь на Вашу помощь, заранее спасибо!

Phantom Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Phantom (статус: Посетитель)
Вопрос отправлен: 9 мая 2012, 18:17
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: bugmenot

Здравствуйте, Бородеев Илья Вадимович!
Это описан классовый метод. Статическими же являются все невиртуальные методы экземпляра. В качестве иллюстрации см. System.TObject.Free:

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;
который вызывает виртуальный деструктор экземпляра. Таким образом:
var 
  o: TStrings; { например }
begin
  o := nil;
  o.Free;  { метод статический и исключение не выкинет! }
end.

Почитайте здесь про типы связывания методов
http://docwiki.embarcadero.com/RADStudio/en/Methods#Method_Binding
а ниже есть про классовые методы

Ответ отправил: bugmenot (статус: 3-ий класс)
Время отправки: 9 мая 2012, 19:10
Оценка за ответ: 5

Комментарий к оценке: Спасибо, понял!

Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 10 мая 2012, 18:11; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 9 мая 2012, 19:05 [#1]:

Всё правильно. Что волнует-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 10 мая 2012, 10:54 [#2]:

все невиртуальные методы статические? это нечто.
а код
var 
  o: TStrings; { например }
begin
  o := nil;
  o.Free;  { метод статический и исключение не выкинет! }
end.
это конечно нечто. Да, исключения не будет, но по совсем другой причине.
Галочка "подтверждения прочтения" - вселенское зло.
bugmenot

bugmenot (статус: 3-ий класс), 10 мая 2012, 18:11 [#3]:

Цитата (Вадим К):

это конечно нечто

Ваша попытка покритиковать мой ответ это нечто :-)

Цитата (Вадим К):

исключения не будет, но по совсем другой причине

И по какой же, интересно? Учитывая, что Free статический, и логика, приведенная мной успешно выполнится.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.