|
Вопрос # 6 123/ вопрос открыт / |
|
Здравствуйте! Есть вопрос. Почитал учебники по Дельфи на разных сайтах: статическим называется метод объявленный с ключевым словом class и, в отличие от НЕСТАТИЧЕСКОГО метода, может быть вызван без конструирования объекта вот так: type TMyClass = class class procedure MyProcedure; end; end; var i : integer; begin TMyClass.MyProcedure; end; Получается, метод вызываемый посредством создания объекта нестатический?! Причем, тут же ниже: "все методы Delphi по умолчанию статические". Как же так? Ведь только что написали, что МЕТОД ЭКЗЕМПЛЯРА НЕстатический! Очень надеюсь на Вашу помощь, заранее спасибо!
 |
Вопрос задал: 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™ (статус: Доктор наук), 9 мая 2012, 19:05 [#1]:
Всё правильно. Что волнует-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 10 мая 2012, 10:54 [#2]:
все невиртуальные методы статические? это нечто.
а код
var
o: TStrings; { например }
begin
o := nil;
o.Free; { метод статический и исключение не выкинет! }
end.
это конечно нечто. Да, исключения не будет, но по совсем другой причине.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
bugmenot (статус: 3-ий класс), 10 мая 2012, 18:11 [#3]:
Цитата (Вадим К):
это конечно нечто
Ваша попытка покритиковать мой ответ это нечто 
Цитата (Вадим К):
исключения не будет, но по совсем другой причине
И по какой же, интересно? Учитывая, что Free статический, и логика, приведенная мной успешно выполнится.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|