从结构调用方法

本文关键字:方法 调用 结构 | 更新日期: 2023-09-27 18:19:33

我正在将hsb颜色转换为rgb,因为我正在将java程序转换为c#。然而,在HSBColor的结构中,一旦我创建了一个对象,我似乎就无法调用这些方法,如下所示:

HSB颜色结构

public struct HSBColor
        {
    public static Color FromHSB(HSBColor hsbColor)
            {
                float r = hsbColor.b;
                float g = hsbColor.b;
                float b = hsbColor.b;
                if (hsbColor.s != 0)
                {
                    float max = hsbColor.b;
                    float dif = hsbColor.b * hsbColor.s / 255f;
                    float min = hsbColor.b - dif;
                    float h = hsbColor.h * 360f / 255f;
                    if (h < 60f)
                    {
                        r = max;
                        g = h * dif / 60f + min;
                        b = min;
                    }
                }
       ***I know there are missing brackets here, only using snippets of code***

mandelbrot

 private void mandelbrot() // calculate all points
        {
            HSBColor hsbcolor = new HSBColor();
            hsbcolor.FromHSB(h, 0.8f, b);
        }

hsbc颜色中的"FromHSB"。FromHSB(h,0.8f,b);这一行加了下划线,说明错误:

错误3"Fractal.Form1.HSBColor"不包含"HSBColor"的定义,也找不到接受类型为"Fractal_Assignment.Form1.HSBClor"的第一个参数的扩展方法"HSBColor"(是否缺少using指令或程序集引用?)

从结构调用方法

public static Color FromHSB(HSBColor hsbColor)

这意味着它是一个静态函数。您可以通过类名访问静态函数。

hsbcolor.FromHSB(h, 0.8f, b);

hsbcolor在这里是一个变量。将该行更改为

Color color = HSBColor.FromHSB(h, 0.8f, b);

根据您的方法签名

  public static Color FromHSB(HSBColor hsbColor)

你必须放这样的东西:

  // "static" wants class (i.e. HSBColor) not instance
  // FromHSB wants one HSBColor argument: "new HSBColor(...)"
  Color result = HSBColor.FromHSB(new HSBColor(h, 0.8f, b));

更好的实现是将FromHSB静态转换为实例方法:

  public struct HSBColor {
    // note no "static" here
    public Color ToColor() {
      float r = this.b; // change "hsbColor" into "this "
      float g = this.g; 
      ...
    }

所以你可以把它放在

  Color result = (new HSBColor(h, 0.8f, b)).ToColor();