Как бы я представил HSL и цвет RGB в качестве класса в C#?

StackOverflow https://stackoverflow.com/questions/4770921

Вопрос

Как бы я напишет класс в C#, который представляет собой цвет HSL и цвет RGB?

Как только я это сделаю, можно ли добавить метод, который распечатывает каждый из атрибутов класса? Я слышал о ToString(), но я не уверен, как его использовать.

Некоторый пример кода был бы очень полезен, так как я студент и пытаюсь научиться использовать C#. Спасибо!

Это было полезно?

Решение

Люди раздражаются, когда вы публикуете «вопросы», просят других написать код для вас. Много вопросов от новых пользователей казаться Чтобы спросить об этом, и ваш даже делает это явно. Анкет Надеемся, что это объясняет некоторые из негативных реакций, с которыми вы столкнулись от других пользователей, либо при понижении, голосовая за закрытие или даже удаление ваших вопросов. Я надеюсь, что это не дало вам такого негативного опыта, что вы изгнали. В будущем вы обнаружите, что люди гораздо более охотно помогут вам, если вы покажете некоторые доказательства того, что вы попытались сначала помочь себе. Покажите нам какой -то код, который вы написали (но не работаете), или предложите некоторые возможные способы, которыми вы пытались решить проблему самостоятельно. Большинство вопросов не «слишком тривиальны», а не реальные вопросы. Мы не сервис по написанию кода, но мы все еще рады помочь.

При этом я постараюсь продолжать отвечать на вопрос, как я сделал в комментарии. Если бы только потому, что я люблю кодирующие вопросы, которые касаются цвета цвета и цветового пространства. Вопрос о том, как преобразовать между цветными пространствами уже задавался и отвечал здесь несколько раз здесь. Например, я (и несколько других) предоставил алгоритм (на нескольких разных языках) здесь. Анкет Должно быть просто преобразовать любой из них на любой язык, который вы выберете.

Что касается «Как написать класс для представления значений в этих цветовых пространствах», это довольно просто. Поиск в Google также приведет несколько результатов людей, которые уже сделали то же самое. Лично я рекомендую создать структура, а не класс, потому что это очень легкий объект, а значения цвета неизменны (что означает, что они не меняются). Это идеально подходит для структуры, и если вы хотите больше объяснить разницу, вы можете найти что вопрос имеет уже спросили а также ответил здесь тоже.

Но какой бы вы ни выбрали, конечный результат выглядит очень похоже. Я предполагаю, что если это для класса программирования, вас уже учили всему, что вам нужно знать, чтобы иметь возможность сделать это самостоятельно. Это означает, что вы уже должны были узнать о частных областях (переменных членов), общественных свойствах и методах. Вы начнете с создания структуры с 3 частными полями для представления каждого из значений цвета; Оттенок (H), насыщение (и) и легкость (L). Они, вероятно, должны быть каждая Integer, потому что отдельные значения цвета составляют целые числа от 0 до 100, или 0 и 360. Если вы заботились о максимальной точности, вы можете сохранить их как тип Decimal и справиться с конверсией в Integer В общественных свойствах, которые разоблачают их миру, но я сомневаюсь, что это необходимо здесь. В любом случае вам затем необходимо создать те общественные свойства, которые разоблачают ваши частные области миру. Это основная концепция в объектно-ориентированном программировании, и она не должна быть новой для вас. (Если это так, вам действительно нужно остановиться сейчас и получить книгу, которая объясняет вам OOP. Не проходите, не собирайте 200 долларов.) Эти общественные объекты должны быть типа Integer, Должны быть 3 из них для каждого из отдельных значений цветовых компонентов, и они должны (по крайней мере, если вы создаете неизменную структуру) только для чтения (включайте только Getter, а не сеттер). Что-то вроде этого:

/// <summary>
/// Represents an HSL color, composed of individual
/// Hue, Saturation, and Lightness attributes.
/// </summary>
public struct HSLColor
{
    private int _hue;
    private int _saturation;
    private int _lightness;

    /// <summary>
    /// The hue attribute of the color.
    /// (This is a value, in degrees, from 0 to 360.)
    /// </summary>
    public int Hue
    {
        get { return _hue; }
    }

    /// <summary>
    /// The saturation attribute of the color.
    /// (This is a percentage between 0 and 100.)
    /// </summary>
    public int Saturation
    {
        get { return _saturation; }
    }

    /// <summary>
    /// The lightness attribute of the color.
    /// (This is a percentage between 0 and 100.)
    /// </summary>
    public int Lightness
    {
        get { return _lightness; }
    }
}

Наконец, вы говорите, что вам нужно переопределить ToString метод Как следовало бы узнать, этот метод предоставляется каждым классом в рамках .NET, потому что он унаследован от базы Object. Анкет Конечно, это помечено как virtual, что позволяет вам переопределить его и обеспечить свою собственную реализацию. Самое сложное - выяснить, как должно выглядеть его возвратное значение. Вы можете представлять цвет как триада, показывая три его отдельных значения компонентов. Несмотря на это, вам нужно использовать String.Format метод, что позволяет создавать строку, включая «элементы формата», которая заменяется значением соответствующего объекта. Например, вот как я это делаю:

/// <summary>
/// Returns the "(HH, SS, LL)" representation of this HSLColor structure.
/// </summary>
public override string ToString()
{
    return string.Format("({0}, {1}, {2})",
                         this.Hue,
                         this.Saturation,
                         this.Lightness);
}

Этого должно быть достаточно, чтобы начать. я очень Поощряйте вас не скопировать и вставить код, предоставленный здесь в качестве вашего задания. Вы так ничего не изучаете. Запустите свой IDE, напишите код самостоятельно и попробуйте пару различных вариаций. Убедитесь, что вы понимаете, как это работает, что я сделал, и как вы могли бы сделать это снова самостоятельно. Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top