![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно наследовать свойства?
MegaVolt © (2004-10-15 16:10:00)есть некий родительский клас.
У него есть
property Port[A:cardinal]:cardinal read GetPort write SetPort;
Как правильно описывать Get и Set port чтобы в наследниках можно было их изменить.
так?
protected
GetPort ....
SetPort ....
Или данное действие вообще не так делается?
Ega23 (2004-10-18 13:28:00) [1]Это уже не раз поднималось в темах, типа "А вот в С++ есть дружественные классы, а в Delphi - нет."
MegaVolt (2004-10-18 12:32:00) [2]Я не видел такой темы :(
KSergey (2004-10-18 12:12:00) [3]> 5] MegaVolt © (18.10.04 11:54)
> Какой ужас :( А это почему возможно то?
Так в хелпе написано, документированное поведение.
Перетиралось тут не раз
MegaVolt (2004-10-18 11:54:00) [4]Какой ужас :( А это почему возможно то?
Ega23 (2004-10-18 11:00:00) [5]А я не перекрытие тебе демонстрировал, а то, что описание классов в одном юните даёт доступ к private-секциям ДАЖЕ без наследования!
MegaVolt (2004-10-18 10:48:00) [6]А где перекрытие?
Ega23 (2004-10-15 19:20:00) [7]По-идее, конечно в 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-15 19:02:00) [8]Запросто перекрываются. Раз видны значит и перекрыть можно. А то что в одном или не в одном юните так вообще без разницы.
Ega23 (2004-10-15 18:18:00) [9]Это как? Ведь для наследника эти функции недоступны как их можно перекрыть?
А ты попробуй в одном юните один класс от другого отнаследовать.
MegaVolt (2004-10-15 16:39:00) [10]Это внешнее устройство так что выносить не нужно :)
Skier (2004-10-15 16:35:00) [11]и, возможно, в protected нужно будет вынести структуру, которая
"управляет" свойством Port это, видимо, список или массив...
Skier (2004-10-15 16:33:00) [12]protected
procedure SetPort(Index : Cardinal; Value : Cardinal); virtual;
function GetPort(Index : Cardinal) : Cardinal; virtual;
MegaVolt (2004-10-15 16:30:00) [13]Это как? Ведь для наследника эти функции недоступны как их можно перекрыть?
Ega23 (2004-10-15 16:28:00) [14]Если всё в одном юните, то пофигу.
MegaVolt (2004-10-15 16:27:00) [15]Если они в приват будут как в потомке их перекрыть если они не видны наследнику?
Ega23 (2004-10-15 16:26:00) [16]Я их вообще в private оставляю.
MegaVolt (2004-10-15 16:18:00) [17]Ega это само собой. Подход правилен? Т.е. я их из privat закидываю в protected или public?
Ega23 (2004-10-15 16:15:00) [18]опиши как virtual;