所以我正在慢慢阅读“C#球员指南,第二版”一书。我已经尝试过了!涉及课程的活动。它告诉我创建一个带有红色,蓝色,绿色和alpha的getter和setter的Color类,我已经完成了。
它还告诉我要制作一个球类,它需要大小,颜色(使用颜色类)和timesThrown变量。我已经做得很好了,我现在回到主类程序类中制作球类的实例。
我真的很好奇这是一个更好的方法来制作这个球,因为一种方式看起来更有效,但后来我不知道如何使用Color类的getter和setter,以及另一种方式效率低但允许我使用所有这些。并且无法使用类中的方法我不明白为什么我不会仅仅定义Ball类中的颜色,除非只是为了学习类以及如何制作它们,本教程已经有了我这样做吗?
所以我个人先做的方式,让我使用Color类中的所有方法就像这样:
Color red_color = new Color(255, 0, 0);
Ball red_ball = new Ball(5, red_color);
因为那可以让我做red_color.GetRed();例如。
另一种方式是:
Ball blue_ball = new Ball(4, new Color(0, 0, 255));
但是当我这样做的时候,我该如何使用Color类中定义的方法?我的第一直觉是使用静态,因为我没有制作一个实例,但很明显,例如,红色,并不总是对每个球都是相同的值,所以这是行不通的。
所以是的,第二种方法是否允许我使用Colors方法?如果我措辞不好,请道歉。
答案 0 :(得分:0)
我的第一直觉是使用Static,因为我没有制作实例
嗯,你正在制作一个实例。 每次您看到新关键字都是新实例。当你直接将它传递给构造函数时,你就没有它的引用:
新球(4,新颜色(0,0,255));
如果public BallColor Color { set; get; }
类中有Ball
,则可以通过Ball
对象访问Color,如下所示:
red_ball.BallColor.Something
因此,如果您只需要Color
对象将其传递给Ball
的构造函数,请使用第二种方法。如果您需要引用Color
以便在程序中的代码中读取/写入该对象的数据,那么请使用第一种方法。
此处没有规则,它基于以下代码和用法。所以你需要问自己:
我是否需要在Ball对象外部保留对Color对象的引用?
答案 1 :(得分:0)
在你的球类中,你可以像这样添加一个名为color的属性
Color BallColor {get;private set;}
并在你的构造函数中你应该设置你想要的球颜色
Ball blue_ball = new Ball(4, new Color(0, 0, 255));
你可以使用像这样的颜色方法
blue_ball.BallColor.GetRed();
答案 2 :(得分:0)
如果您需要与Color
的实例进行交互的唯一地点位于Ball
的实例内,请以第二种方式执行此操作。
但是,如果您需要在其他地方与Color
的实例进行交互,请从第一种方式开始。例如,如果您要连续创建四个红色Ball
,请创建一个红色Color
实例并将其传递给每个实例:
var balls = new List<Ball>();
var red = new Color(255, 0, 0);
for (int i = 0; i < 4; ++i) {
balls.Add(new Ball(4, red));
}
有时一个是合适的,有时是另一个。两者都不是绝对“最好的”;做你在你面前的特定情况下有效的方法。有时您可能只是为了提高可读性而创建一个局部变量。
请参阅@ ShlomiHaver的回答。
答案 3 :(得分:0)
你当然可以这样做,但请记住,实例化对象的上下文始终是最重要的。
你想知道球的颜色,对吗?所以在Ball类中添加一个合适的方法。
public class Ball
{
private int Size { get; set; }
private Color BallColor { get; set;}
Ball(int size, Color color)
{
Size = size;
BallColor = color;
}
public Color GetBallColor()
{
return BallColor;
}
}
然后你可以像这样使用球的颜色:
var ball = new Ball(5, new Color(0, 0, 0));
var ballColor = ball.GetBallColor();
var ballColorRedValue = ballColor.GetRed();
使用属性实现相同的功能是完全可以接受的。