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

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

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

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

Сообщение Brainenjii » 04.08.2011 13:17:40

Создаём новый проект:
Код: Выделить всё
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 писал(а):!

Налицо обращение к приватному методу, даже если все объявления всех классов и интерфейсов раскиданы по разным модулям ^_^ Насколько это нормально? ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Sergei I. Gorelkin » 04.08.2011 15:47:49

Совершенно нормально. Методы интерфейса всегда публичны, а метод класса остается private (т.е. его по-прежнему нельзя вызвать по ссылке на объект).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru