Правильное оформление поля
Есть поле состоящее из клеток, а точнее объектов класса Cell.
Как лучше и правильнее в этом классе прописать тип поля?
string Type; который может быть равен например "Земля" или "Вода" это я так понимаю не очень правильно.
Это лучше делать через перечисления? Или int который может быть равен например 1 или 2, а в комментарии сказать, что одно это земля, а другое вода. Но я понимаю так тоже не красиво.
Если можно примеры.
Ответы (1 шт):
У вас не правильная модель. Вы не должны хранить клетки как отдельный класс, а как структуру.
public class Field
{
Cell[] cells;
public ref Cell this[int index] => ref cells[index]; // можно добавить кастомный чек на индекс
}
public struct Cell
{
public CellType CellType { get; set; }
}
public enum CellType
{
Empty, // или Unknow, или Invalid // лучше определять пустую вариацию поля
Earth,
Water,
⋮
}
Такая модель обеспечит вам минимальную нагрузку на кучу, при этом вы копируете именно ссылку, а не всю структуру.
Касаемо вопроса об том, где хранить тип клетки: тут всё зависит от вашей программы. Если типы клетки статичны, т. е. известны заранее, то самым лучшим решением окажется enum – минимальная нагрузка на память без потери читабельности (использовать вместо enum int – это худшее, что вы можете сделать). Но, если захотите определять типы динамически, т. е. во время run-time'а (запуска программы), то тут лучше использовать наследование (в случае с абстрактным классом: давайте не забывать, что интерфейсы мы не наследуем, а реализуем) и сделать что-то типо этого:
public interface ICellType
{
// какие-то св-ва вашего типа, по типу: проходимость, текстура и т. д.
}