Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизКак правильно наследовать свойства? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c