wkiess01 Ответов: 1

C# несколько свойств одного типа против одного массива свойств


Настоящий вопрос новичка, и я даже не уверен, что использую правильную терминологию.
Я хочу построить класс, который имеет 7 цветовых свойств плюс целую кучу других свойств (не цветов). Все цветовые свойства связаны с одной и той же вещью в классе и в основном являются индикатором уровня от 1 до 7 (Подумайте о счетчике/датчике уровня воды).
Должен ли я создать класс и имя/создать каждое свойство цвета индивидуально по имени, например Level1Color, Level2Color...Level7Color
ОПЕРАЦИОННАЯ
Должен ли я создать массив свойств из 7 цветов, например LevelColors[] ? Как мне ограничить его до 7 цветов?
Я думаю, что код может выглядеть примерно так:
Public Class MyObject1
{
    Level1Color {get; set};
    Level2Color {get; set};
//etc
}

Public Class MyObject2
{
    LevelColor[] {get; set}:
}


Что я уже пробовал:

Я еще ничего не пробовал, так как не уверен, что является лучшей практикой, отдельные свойства или массив.

1 Ответов

Рейтинг:
10

OriginalGriff

Если они буквально являются просто "уровнями", то отдельные свойства не имеют большого смысла - имена не особенно полезны, и наличие их в виде массива делает некоторый код довольно простым: вы можете легко перебирать их, например, при сохранении в энергонезависимой памяти.

Я бы пошел с массивом (но обратите внимание, что ваш код не будет компилироваться: C# чувствителен к регистру, поэтому "Public" и "Class" - это не одно и то же public и class; двоеточие в конце версии на основе массива неверно; все объявление свойства неверно для обоих типов).

public class MyClass
    {
    public const int MaxColors = 7;
    public Color[] ColorLevels { get; set; } = new Color[MaxColors];
    }


Цитата:
Спасибо, Оригиналгрифф. Это сделало трюк для известного количества цветов. Что делать, если я хочу сделать его переменным числом цветов, известным только в момент создания объекта. Как использовать свойство для передачи и считывания количества элементов в массиве?


Это просто: вместо выделения массива при объявлении свойства вы выделяете его как часть конструктора класса:
public class MyClass
    {
    public Color[] ColorLevels { get; private set; }
    public MyClass(int maxColours)
        {
        ColorLevels = new Color[maxColours];
        }
    }
Ваш код может проверить, сколько уровней разрешено, запросив цветовые уровни.Свойство length.


wkiess01

Спасибо, Оригиналгрифф. Это сделало трюк для известного количества цветов. Что делать, если я хочу сделать его переменным числом цветов, известным только в момент создания объекта. Как использовать свойство для передачи и считывания количества элементов в массиве?

OriginalGriff

Ответ обновлен.

wkiess01

И снова это сделало свое дело. Так как же мне получить количество уровней, чтобы они отображались как свойство? Что-то вроде этого, возможно:

public int LevelCount
{
  get { return ColorLevels.Length; }
}

OriginalGriff

Да - но в этом, вероятно, нет никакой необходимости, так как ColorLevels есть public и внешний код может получить доступ к свойству длины напрямую.