Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Как правильно наследовать свойства?   Найти похожие ветки 

 
MegaVolt ©   (2004-10-15 16:10) [0]

есть некий родительский клас.
У него есть

property Port[A:cardinal]:cardinal read GetPort write SetPort;

Как правильно описывать Get и Set port чтобы в наследниках можно было их изменить.
так?

 protected
GetPort ....
SetPort ....


Или данное действие вообще не так делается?


 
Ega23 ©   (2004-10-15 16:15) [1]

опиши как virtual;


 
MegaVolt ©   (2004-10-15 16:18) [2]

Ega это само собой. Подход правилен? Т.е. я их из privat закидываю в protected или public?


 
Ega23 ©   (2004-10-15 16:26) [3]

Я их вообще в private оставляю.


 
MegaVolt ©   (2004-10-15 16:27) [4]

Если они в приват будут как в потомке их перекрыть если они не видны наследнику?


 
Ega23 ©   (2004-10-15 16:28) [5]

Если всё в одном юните, то пофигу.


 
MegaVolt ©   (2004-10-15 16:30) [6]

Это как? Ведь для наследника эти функции недоступны как их можно перекрыть?


 
Skier ©   (2004-10-15 16:33) [7]

protected
procedure SetPort(Index : Cardinal; Value : Cardinal); virtual;
function GetPort(Index : Cardinal) : Cardinal; virtual;


 
Skier ©   (2004-10-15 16:35) [8]

и, возможно, в protected нужно будет вынести структуру, которая
"управляет" свойством Port это, видимо, список или массив...


 
MegaVolt ©   (2004-10-15 16:39) [9]

Это внешнее устройство так что выносить не нужно :)


 
Ega23 ©   (2004-10-15 18:18) [10]

Это как? Ведь для наследника эти функции недоступны как их можно перекрыть?

А ты попробуй в одном юните один класс от другого отнаследовать.


 
MegaVolt ©   (2004-10-15 19:02) [11]

Запросто перекрываются. Раз видны значит и перекрыть можно. А то что в одном или не в одном юните так вообще без разницы.


 
Ega23 ©   (2004-10-15 19:20) [12]

По-идее, конечно в protected надо отписывать.
Но вот такая конструкция спокойно живёт:

unit Unit1;

interface

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

type
 TMyClass=class(TObject)
  private
   FX:Integer;
  public
   property X:Integer Read FX Write FX;
 end;

 TForm1 = class(TForm)
   Label1: TLabel;
   Label2: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
  MyClass:TMyClass;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
MyClass:=TMyClass.Create;
MyClass.FX:=5;
Label1.Caption:=IntToStr(MyClass.FX);
MyClass.X:=10;
Label2.Caption:=IntToStr(MyClass.X);
end;

end.


 
MegaVolt ©   (2004-10-18 10:48) [13]

А где перекрытие?


 
Ega23 ©   (2004-10-18 11:00) [14]

А я не перекрытие тебе демонстрировал, а то, что описание классов в одном юните даёт доступ к private-секциям ДАЖЕ без наследования!


 
MegaVolt ©   (2004-10-18 11:54) [15]

Какой ужас :( А это почему возможно то?


 
KSergey ©   (2004-10-18 12:12) [16]

> 5] MegaVolt ©   (18.10.04 11:54)
> Какой ужас :( А это почему возможно то?

Так в хелпе написано, документированное поведение.
Перетиралось тут не раз


 
MegaVolt ©   (2004-10-18 12:32) [17]

Я не видел такой темы :(


 
Ega23 ©   (2004-10-18 13:28) [18]

Это уже не раз поднималось в темах, типа "А вот в С++ есть дружественные классы, а в Delphi - нет."



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
8-1091222553
d10
2004-07-31 01:22
2004.10.31
Проблема с 32 битами на DirectX JEDI, IDirectDraw7


1-1097746852
jenbond
2004-10-14 13:40
2004.10.31
Нужен совет в работе прогораммы


14-1097323092
андрей_
2004-10-09 15:58
2004.10.31
Какой монитор долговечнее?


4-1096128648
Yuri Btr
2004-09-25 20:10
2004.10.31
Проблема с VCL компонентами при установке таймера timeSetEvent


6-1093108291
Asd
2004-08-21 21:11
2004.10.31
Асинхронная ошибка как с ней бороться