从结构调用方法
本文关键字:方法 调用 结构 | 更新日期: 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();