我将如何在C#中编写代表HSL颜色和RGB颜色的类?

一旦有了,是否可以添加一种打印出每个类属性的方法?我听说过 ToString(), ,但我不确定如何使用它。

某些示例代码将非常有用,因为我是学生,并试图学习如何使用C#。谢谢!

有帮助吗?

解决方案

当您发布“问题”要求其他人为您编写代码时,人们会感到烦恼。新用户有很多问题 似乎 要求这个,您甚至这样做 明确. 。希望这解释了您从其他用户遇到的一些负面反应,要么在投票,投票以关闭甚至删除您的问题。我希望这不会给您带来如此消极的经历,以至于您被赶走了。将来,您会发现,如果您展示一些试图先帮助自己的证据,人们会更愿意为您提供帮助。向我们展示您编写的一些代码(但不起作用),或建议您尝试自己解决问题的一些可能的方法。大多数问题不是“太微不足道”,而是真实的问题。我们不是代码写作服务,但我们仍然很乐意提供帮助。

话虽这么说,我将尝试像我在评论中一样实际回答这个问题。如果只是因为我喜欢编码涉及颜色和颜色空间转换的问题。在这里已经询问和回答了如何在颜色空间之间进行转换的问题。例如,我(和其他几个)提供了一种算法(以几种不同的语言) 这里. 。将其中的任何一种转换为您选择的任何语言应该很简单。

至于“我如何编写一类以表示这些颜色空间中的值”,这很简单。 Google搜索也将使已经做过同样的事情的人们提供了一些结果。就个人而言,我建议创建一个 结构体, ,而不是班级,因为它是一个非常轻巧的对象,颜色值是不变的(这意味着它们不会改变)。这非常适合结构,如果您想更多地解释差异,您可以找到 问题已经被问到了在这里也回答.

但是,无论您选择哪个,最终结果看起来都非常相似。我认为,如果这是针对编程课程的,那么您已经被教导了所有需要自己做的事情。意思是,您应该已经了解了私人字段(成员变量),公共属性和方法。首先,您将创建一个具有3个私有字段的结构来表示每个颜色值;色相(H),饱和度(S)和轻度(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