Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами и классами (начинающему) / 5 сообщений из 5, страница 1 из 1
23.10.2019, 14:59
    #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
23.10.2019, 15:00
    #39880499
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами и классами (начинающему)
Ошибок нет, код идеален.
...
Рейтинг: 0 / 0
23.10.2019, 15:14
    #39880507
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами и классами (начинающему)
ёёёёё, не работает же )

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


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