Структура программирования, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Дружественные классы в Delphi, Как бы сделать?
КВадратное уравнение, обычная программа с дискриминантом
:Определитель номера, :Определитель номера
I/O Error 32 при редактировании файла
Как запонить StringGrid из текстового файла
Подобие Drag&Drop
Как можно связать TTreeView с базой?, может кто сталкивался?
Разделу нужна помощь, Заполнение FAQ
Cоединение 2-х html-ин, в дельфе ???, Есть процеда, или все ручками делать ???
Компоненты Current Project, AllDataBaseDiagrams
Блокировка клавиатуры (временная), в WinXP
??? - вместо текста
Delphi without BDE, Установка Delphi
RichEdit, Подсветка синтаксиса!

Платные хостинги     Раскрутка сайта     Книги по программированию


Дружественные классы в Delphi, Как бы сделать?

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Здравствуйте! Идея такая. Есть два класса A и B. Они находятся в разных файлах. У класса A есть свойство типа B, а у класса B есть свойство типа A. Можно ли как-нить это дело организоват? Половинчатное решение я уже нашёл... А теперь перейдём к дружественным классам. Можно ли в Delphi сделать так, чтобы класс A имел доступ к private-свойствам класса B, если эти классы находятся в разных файлах? В C++ для этого есть специальное ключевое слово friend для указания дружественного класса, а вот как в Delphi сделать - не знаю Помогите, пожалуйста, советом!Спасибо!

- Vitalik В Дельфи понятия дружественных классов нет Это сообщение отредактировал <Spawn> - 11.11.2004, 14:33

- <Spawn>, а можно как-нибудь добиться похожего эфекта?Ну просто очень нужно решить эту проблему. Есть два больших класса и я разбил их на два файла. Но ээти классы немного связаны друг с другом и один класс должен иметь доступ к private-свойствам другого класса. Пока что я просто эти свойства объявил как public, но это не есть хорошо

- Сорри, предыдущий пост был мой.Это я с компьютера брата сообщение хотел отослать и забыл перелогиниться

- Можно через include файл - т.е. физически файлов будет 2, но логически Дельфи их будет интерпретировать как один...

- Но весь класс со всеми функциями наверное не получится выделить в один файл. Ведь interface и implementation секций в файле может быть только по одной?А если выделить в файл только функции, то нельзя будет пользоваться всеми прелестями Delphi (Ctrl+Shift+Вниз, Ctrl+[щелчек по функции] и т.д...)! Неужели решения этой проблемы не существует?

- Думаю что не существует

- http://www.google.kz/search?q=cache:rLQadD...lient=firefox-aИнтересно, что имел ввиду автор?Вот прямой линк, без подсветки слов. http://books.dore.ru/bs/f11bid821.html

- Возможно он говорил про классы в одном юните...

- Я нашел решение неплохое решение второй проблемы (про дружественные классы)Правда private-переменные придётся сделать protected - но это того стоит.Ниже привожу рабочий пример решения следующей проблемы: Есть класс MainClass, который должен получить доступ к private-переменной класса SomeClass (правда через protected-свойство).Код unit MainClass;interfaceuses SomeClass;type  { Главный класс программы }  TMainClass = class  private    { Дополнительный класс программы, но главный класс должен иметь полный доступ к его свойствам }    SomeClass: TSomeClass;  public    { Конструктор главного класса }    constructor Create();    { Процедура, в которой осуществляется доступ к private-переменной класса TSomeClass }    function SetPrivateProperty(Value: integer): integer;  end;type  { Гениальная идея предложенная Rouse_ }  TMySomeClass = class(TSomeClass);implementationconstructor TMainClass.Create();begin  SomeClass := TSomeClass.Create();end;function TMainClass.SetPrivateProperty(Value: integer): integer;begin  TMySomeClass(SomeClass).SomeProperty := Value;  Result := SomeClass.GetPrivateProperty;end;end.highlightSyntax('delphijJlODc','delphi');Код unit SomeClass;interfacetype  { Дополнительный класс программы, но главный класс должен иметь полный доступ к его свойствам }  TSomeClass = class  private    { Скрытое свойство, которое не должен видеть никто, кроме TMainClass }    fPrivateProperty: integer;    { Процедура установки значения fPrivateProperty }    procedure SetPrivateProperty(Value: integer);  public    { Только для проверки правильности работы }    function GetPrivateProperty(): integer;  protected    { Свойство, через которое TMainClass получает доступ к fPrivateProperty }    property SomeProperty: integer read GetPrivateProperty write SetPrivateProperty;  end;implementationprocedure TSomeClass.SetPrivateProperty(Value: integer);begin  fPrivateProperty := Value;end;function TSomeClass.GetPrivateProperty(): integer;begin  Result := fPrivateProperty;end;end.highlightSyntax('delphiGJmN2Q','delphi');Проверка работы:Код procedure TForm1.Button1Click(Sender: TObject);var  MainClass: TMainClass;begin  MainClass := TMainClass.Create();  Label1.Caption := IntToStr(MainClass.SetPrivateProperty(StrToInt(Edit1.Text)));end;highlightSyntax('delphijZjRlY','delphi');

- По-моему я тебе эту идею говорил больше года назад... Ты сказал тогда что это не то...

- В принципе есть половинчитое решение: объявить нужное свойство protected, а в другом юните унаследовать от него fake класс, в котором это свойство передекларировать. Тогда можно свойство останеться невидимым для клиента, но будет видимым для твоего второго класса. Не знаю, это ли решение ты имел в виду. Добавлено @ 20:13 Ага, ну вот это же самое и я имел в виду.

- Fantasist - может через множественное наследование интерфейсов можно выкрутится?

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | opengl программирование | программирование бейсик | программирование интерфейса | программирование pocket | программирование заказы | задача динамического программирования | prolog программирование | стохастическое программирование | процедурное программирование | история языков программирования | структура программирования | языки программирования высокого уровня | программирование устройств | функции программирования | программирование siemens | списки программирование | язык программирования java | олимпиада программирование | программирование мобильных телефонов | дипломная работа программирование | программирование palm | Ссылки

Все про процедурное программирование