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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 422

/ вопрос открыт /

Здравствуйте! Недавно дописывал класс и наткнулся на возможность использовать класс как список. Для удобства я прописал классу метод Assign. Теперь вопрос, почему в методе Assign допустима такая запись:

procedure TLine.Assign(Line: TLine);
begin
Self.FColor := Line.FColor; //???
...

Ведь поле FColor определено в секции private!, которая не должна быть доступна из вне класса.

Приложение:
  1. ...
  2. type
  3. TLine = class
  4. private
  5. FPredIndex: longword;
  6. FCount: longword;
  7. FColor: TColor;
  8. FVisibleLine: boolean;
  9. FRePaint: TRePaint;
  10. FReMove: TReMove;
  11. FMagnet: word;
  12. FPointSize: word;
  13. FSmooth: word;
  14. FJoin: boolean;
  15. FNumbers: boolean;
  16. FTag: integer;
  17. FStyle: TPenStyle;
  18. FWidth: integer;
  19. FLine: TLine;
  20. FClosed: boolean;
  21. FLineRoot: Tline;
  22. ...
  23. protected
  24. //
  25. public
  26. procedure Assign(Line: TLine);
  27. ...
  28. end;
  29. ...
  30. procedure TLine.Assign(Line: TLine);
  31. begin
  32. Self.FColor := Line.FColor;
  33. Self.FVisibleLine := Line.FVisibleLine;
  34. Self.FRePaint := Line.FRePaint;
  35. Self.FReMove := Line.FReMove;
  36. Self.FMagnet := Line.FMagnet;
  37. Self.FPointSize := Line.FPointSize;
  38. Self.FSmooth := Line.FSmooth;
  39. Self.FJoin := Line.FJoin;
  40. Self.FNumbers := Line.FNumbers;
  41. Self.FStyle := Line.FStyle;
  42. Self.FWidth := Line.FWidth;
  43. Self.FLineRoot := Line.FLineRoot;
  44. end;
  45. ...


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

Вопрос задал: SMaks (статус: 1-ый класс)
Вопрос отправлен: 22 марта 2007, 21:59
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, SMaks!
Потому что все типы классов, и private в том числе, доступны из того модуля, где этот класс описан. В доругом модуле, если вы подключите к нему этот, private методы будут закрыты.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 22 марта 2007, 23:09
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: min@y™

Секция private конечно доступна в методе СВОЕГО КЛАССА, ёмаё!

procedure TLine.Assign(Line: TLine);

Ну ты даёшь!

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 23 марта 2007, 08:24
Оценка за ответ: 4

Комментарий к оценке: Вот именно своего, я же беру не свой класс ..Line: TLine.., точнее он должен быть закрытым для меня, но чудеса, я могу получать на прямую его поля из секции private, но только из методов этого же класса.

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

Всего сообщений: 1; последнее сообщение — 22 марта 2007, 23:12; участников в обсуждении: 1.
Матвеев Игорь Владимирович

Матвеев Игорь Владимирович (статус: Студент), 22 марта 2007, 23:12 [#1]:

...вернее поля классов.

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

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