在另一个类Constructor中使用一个类,C#

时间:2016-07-08 14:14:51

标签: c# class constructor console-application

所以我正在慢慢阅读“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方法?如果我措辞不好,请道歉。

4 个答案:

答案 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();

使用属性实现相同的功能是完全可以接受的。