我正在尝试自学C#。从我正在使用的书中,我创建了一个Color类和一个Ball类。以下是相关代码:
iBeacon
这将创建Color类,并允许我为我们习惯于使用Color构造函数的标准RGB光谱分配值。
然后我在Color类中也有一个名为GetRed()的方法,该方法返回在构造函数中创建颜色时为Red设置的值。
iBeacon
最后,我还有一个名为Ball的类,在这里我声明一个实例变量color1以从Color类中获取Red值。
public class Color
{
public int Red;
public int Blue;
public int Green;
public int Alpha;
public Color(int red, int blue, int green, int alpha)
{
this.Red = red;
this.Blue = blue;
this.Green = green;
this.Alpha = alpha;
}
}
我在Ball类中使用color1声明得到的错误是public int GetRed()
{
return Red;
}
。
Visual Studio建议的解决方案是在变量声明中引用名称空间和类,因此在我的情况下,class Ball
{
public int color1 = Color.GetRed();
}
并将我在An object reference is required for the non-static field, method, or property "Color.GetRed()"
类和public int color1 = Hello_World.Color.GetRed()
方法中创建的颜色变量设为静态。这解决了我的问题,但是我想知道是否还有另一种方法可以解决此问题,而不必将变量或方法设为静态。很抱歉,如果我不能很好地解释这一点。我只是从C#开始,所以如果您需要澄清,请在回复中告诉我。谢谢。
答案 0 :(得分:0)
public int color1 = Color.GetRed(); <-从Color类访问静态方法。
public int color1 = new Color()。GetRed(); <-从类Color的实例访问实例方法。
或
public class Ball
{
private Color _color;
public Ball(Color color)
{
_color = color;
}
public int GetColorRedValue()
{
return _color.GetRed();
}
}
和
var color = new Color();
var ball = new Ball(color);
Console.WriteLine(ball.GetColorRedValue()); <- print red color value
答案 1 :(得分:0)
您应该真正创建一个MCVE。没有一个,我们只能猜测。所以我想这就是你的书要你做的:
class Color
{
// ...
}
class Ball
{
Color SurfaceColor = new Color(/*...*/);
}
好吧,哎呀,为什么不呢,让我们多加努力。这是我实现Color
-Ball
模型的方式:
public static class Colors
{
public static readonly Color Red = new Color(255, 0, 0);
public static readonly Color Green = new Color(0, 255, 0);
public static readonly Color Blue = new Color(0, 0, 255);
public static readonly Color White = new Color(255, 255, 255);
public static readonly Color Black = new Color(0, 0, 0);
}
public class Color
{
public int R;
public int G;
public int B;
public Color() : this(Colors.Black) {}
public Color(Color other) : this(other.R, other.G, other.B) {}
public Color(int red, int green, int blue)
{
R = red;
G = blue;
B = blue;
}
}
public class Ball
{
public Color SurfaceColor { get; private set; }
public Ball(Color surfaceColor)
{
SurfaceColor = surfaceColor;
}
}
public class Program
{
public static void Main()
{
Ball blueBall /* huh */ = new Ball(Colors.Blue);
Ball redBall = new Ball(Colors.Red);
Ball maroonBall = new Ball(new Color(128, 0, 0));
}
}