powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами и классами (начинающему)
5 сообщений из 5, страница 1 из 1
Помогите разобраться с интерфейсами и классами (начинающему)
    #39880497
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!!

Если не трудно, подскажите где мои ошибки? Чую их прям дофига :)
Не использовал никогда интерфейсы, захотелось поэкспериментировать, решил учиться на реальной задаче.
Нужен расчет стоимости маш.-часа. В него входит несколько параметров, нужно выдавать пользователю формулу и значение каждого параметра.
Соответственно, наваял вот такой интерфейс и "общий" класс для всех параметров
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
type
  IMashParameter = interface
    // общие методы
    function GetRubValue: Currency;
    procedure SetRubValue(const RubValue: Currency);
    function GetFormula: String;
    procedure SetFormula(const Formula: String);
    // переопределяемые
    procedure ConstructFormula;
    procedure DrawParamVals;
    // общие свойства
    property RubValue: Currency read GetRubValue write SetRubValue;
    property Formula: String read GetFormula write SetFormula;
  end;

type
  TCommonParameter = class(TInterfacedObject, IMashParameter)
  private
    function GetRubValue: Currency;
    procedure SetRubValue(const RubValue: Currency);
    function GetFormula: String;
    procedure SetFormula(const Formula: String);
  public
    procedure ConstructFormula;
    procedure DrawParamVals;
    property RubValue: Currency read GetRubValue write SetRubValue;
    property Formula: String read GetFormula write SetFormula;
  end;

Сами параметры описал как наследника TCommonParameter
Типа вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
type
  TMashAmortiz = class(TCommonParameter)
    AmortID: Integer;
    AmortNorma: Double;
    procedure ConstructFormula;
    procedure DrawParamVals;
  end;

type
  TMashGRR = class(TCommonParameter)
    GRR: Integer;
    GRRTempKoeff: Double;
    procedure ConstructFormula;
    procedure DrawParamVals;
  end;

Создал класс, который собирает в себе все параметры
Код: pascal
1.
2.
3.
4.
5.
6.
type
  TMashSmetData = class(TPersistent)
    public
    VosstFormula: String;
    GRRInfo: TMashGRR;
    AmortInfo: TMashAmortiz;

И затем использую это все
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TMashCalculation = class
  private
...
    FMashSmetData: TMashSmetData;
    procedure FSetMashSmetData(AMashSmetData: TMashSmetData);
  public
    property PriceSmetData: TMashSmetData read FMashSmetData write FSetMashSmetData; 
  end;


И вот теперь как мне значения то менять?
Напрямую естественно (Типа MashCalculation.PriceSmetData.GRRInfo.Formula) писать не дает.
Делаю в тестовой процедуре временный TMashSmetData:
Код: pascal
1.
2.
3.
4.
5.
6.
var
  MSD: TMashSmetData;
begin
...
//при исполнении вываливается что нельзя так присвоить, причем тип указывает в ошибке вообще не этот
        MashCalculation.PriceSmetData.AssignTo(MSD); 



Если не затруднит, укажите на ошибки?
Спасибо!
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами и классами (начинающему)
    #39880499
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибок нет, код идеален.
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами и классами (начинающему)
    #39880507
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё, не работает же )

Если property класса сам есть класс, как правильно в него писать значения?
Понятно, его надо создать сначала. А потом как?
Как с record (сделать сначала временный, и затем присвоить), не получается, при assign выдает вот такой текст (причем там TcxCustom... я вообще не понимаю):
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами и классами (начинающему)
    #39880513
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio, экземпляры создаешь? А то похоже на мусор в памяти...
p.s. virtual, override точно не нужно использовать при наследовании?
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами и классами (начинающему)
    #39880516
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И зачем вообще интерфейсы?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами и классами (начинающему)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]