Вызов Private метода через interface

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Вызов Private метода через interface

Сообщение Brainenjii »

Создаём новый проект:

Код: Выделить всё

program Project1;

{$mode objfpc}{$H+}
{$interfaces CORBA}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, Unit1
  { you can add units after this };

{$R *.res}

Var
  aMyClass: TMyClass;
begin
  aMyClass := TMyExtClass.Create;
  (aMyClass As IMyInterface).Unhiden;
end.

Где Unit1:

Код: Выделить всё


Unit Unit1;

{$mode objfpc}{$H+}
{$interfaces CORBA}

Interface

Uses
  Classes, SysUtils;

Type TMyClass = Class
  Private
  Public
End;

Type IMyInterface = Interface
  Procedure Unhiden;
End;

Type

{ TMyExtClass }

TMyExtClass = Class(TMyClass, IMyInterface)
  Private
    Procedure Unhiden;
  Public
End;

Implementation

{ TMyExtClass }

Procedure TMyExtClass.Unhiden;
Begin
  WriteLn('!');
End;

End.

Результат:
/tmp/project1 писал(а):!

Налицо обращение к приватному методу, даже если все объявления всех классов и интерфейсов раскиданы по разным модулям ^_^ Насколько это нормально? ^_^
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград
Контактная информация:

Re: Вызов Private метода через interface

Сообщение Sergei I. Gorelkin »

Совершенно нормально. Методы интерфейса всегда публичны, а метод класса остается private (т.е. его по-прежнему нельзя вызвать по ссылке на объект).
Ответить