Правильное оформление поля

Есть поле состоящее из клеток, а точнее объектов класса Cell.
Как лучше и правильнее в этом классе прописать тип поля?
string Type; который может быть равен например "Земля" или "Вода" это я так понимаю не очень правильно.
Это лучше делать через перечисления? Или int который может быть равен например 1 или 2, а в комментарии сказать, что одно это земля, а другое вода. Но я понимаю так тоже не красиво.
Если можно примеры.


Ответы (1 шт):

Автор решения: return

У вас не правильная модель. Вы не должны хранить клетки как отдельный класс, а как структуру.

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
{
    // какие-то св-ва вашего типа, по типу: проходимость, текстура и т. д.
}
→ Ссылка