Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.023 c
6-1093242984
MiniTex
2004-08-23 10:36
2004.10.31
Слежение за поротом или его закрытие


9-1069166373
[dRake]
2003-11-18 17:39
2004.10.31
Алгоритм молнии...


1-1097645764
Uran
2004-10-13 09:36
2004.10.31
Runtime Error 216 - что это за ошибка!?


6-1087975627
abcdef
2004-06-23 11:27
2004.10.31
Скачивание файла через HTTP FTP


4-1095923936
Svarog
2004-09-23 11:18
2004.10.31
DLL+ресурсы+контекстное меню = проблема




   Наверх