Необходимо связать уникальное целочисленное значение с классами

Хорошо, у меня есть базовый класс, который мы назовем TFruit . Отсюда есть различные потомки, такие как TApple , TOrange и так далее. Мне нужно сохранить свойства классов-потомков в файл.

Чтобы иметь возможность создать правильный класс при загрузке данных, каждый класс должен иметь ID , который я записываю в файл перед записью фактических данных. В настоящее время я придумал следующий способ сделать это:

type
  TFruit = class
    const ID = 0;
  end;

  TApple = class(TFruit)
    const ID = 1;
  end;

  TOrange = class(TFruit)
    const ID = 2;
  end;

Тестируя это, я обнаружил, что мне нужно быть очень осторожным при выборе класса, который я объявляю. Если я использую это:

  var Fruit: TFruit;

  Fruit := TOrange.Create;

... тогда Fruit.ID вернет ноль . Однако объявление Fruit как TOrange даст ожидаемый результат Fruit.ID = 2 (кто-нибудь знает почему?)

В общем, делаю ли я это право или есть лучший способ сделать это? Необходимость создавать функцию класса и возвращать оттуда значение кажется очень уродливым по сравнению (дополнительное объявление функции, реализация и код).

5
задан RBA 30 November 2010 в 14:33
поделиться