Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 00:32   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Изменять приватные свойства одного класса внутри другого

Можно ли как-нибудь сделать так, чтобы из класса А можно было бы изменять v.bv? Полагаю, должен быть какой-нибудь атрибут Friend
Код:
b = class
private
 bv: integer;
end;

a = class
 v: b;
end;
TwiX вне форума Ответить с цитированием
Старый 09.11.2010, 07:23   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Tb = class
  private
    bv: integer;
  end;

  Ta = class
    v: Tb;
    constructor Create;
    procedure Free;
  end;

var
  Form1: TForm1;

implementation

{ Ta }

constructor Ta.Create;
begin
  inherited Create;
  v := Tb.Create;
  v.bv := 0;
end;

procedure Ta.Free;
begin
  v.Free;
  inherited Free;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  a: Ta;
begin
  a := Ta.Create;
  a.v.bv := 1;
  ShowMessage (IntToStr (a.v.bv));
  a.Free;
end;

end.
Поясни суть проблемы. Ведь в пределах одного модуля раздел private доступен всем.
Sibedir вне форума Ответить с цитированием
Старый 09.11.2010, 09:55   #3
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Можно через интерфейсы, в любых приделах ко всем секциям.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 09.11.2010, 10:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Зачем? Sibedir ведь четко сказал - проблем не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2010, 14:29   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо. В смысле "в пределах одного модуля"? А если А находится в A.pas, а B в B.bas, то так можно делать?
TwiX вне форума Ответить с цитированием
Старый 09.11.2010, 14:34   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

private - скрытый раздел.
По сути ваш вопрос звучит следующим образом: "Я поесил на дверь замок. Как мне в неё войти?"
Зачем, спрашивается, вообще нужно вешать замок?

Есть вариант, когда B.pas - модуль стороннего разработчика. Тогда можно его взять и исправить. Если есть только B.dcu, то остается только материть разработчика.

Последний раз редактировалось Sibedir; 09.11.2010 в 14:37.
Sibedir вне форума Ответить с цитированием
Старый 09.11.2010, 21:27   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А если А находится в A.pas, а B в B.bas, то так можно делать?
нет, private это для классов в одном модуле(A и B в моделе AB.pas)

вообще есть protected который доступен и потомкам.(это при наследовании)

Sanprof, можно и по указателю, благо известно как класс устроен8)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.11.2010, 05:41   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Да, если нет иных способов, через указатель будет самое оно.
Sibedir вне форума Ответить с цитированием
Старый 10.11.2010, 16:59   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Ну так что мешает так написать:
Код:
type TTest = class
  private
   FSecret :string;
   FInt :Integer;
  protected

  public

  published
   property Secret:string read FSecret write FSecret;
   property Intg:Integer read FInt write FInt;
end;
Alter вне форума Ответить с цитированием
Старый 10.11.2010, 17:12   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
Ну так что мешает так написать:
Код:
type TTest = class
  private
   FSecret :string;
   FInt :Integer;
  protected

  public

  published
   property Secret:string read FSecret write FSecret;
   property Intg:Integer read FInt write FInt;
end;
Наверное эго а по указателю, в не управляемом языке, вы серьезно? Доступ на абум. Плохая затея.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства класса ImmortalAlexSan Общие вопросы Delphi 2 05.11.2010 00:33
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Как изменять свойства и функцыи объекта в памяти? VintProg Общие вопросы Delphi 2 10.07.2009 15:29
Вызов одного приложения из другого zalum Общие вопросы Delphi 8 24.04.2009 10:05
BMP-файл внутри другого файла Pashan Общие вопросы C/C++ 0 08.04.2009 16:37