通过构造函数重载赋值属性

本文关键字:赋值 属性 重载 构造函数 | 更新日期: 2023-09-27 18:08:55

在下面的类中,我想将color指定为构造函数1的Color.White;当通过构造函数2调用时,应该为其分配参数值。但是在这样做时,它首先调用构造函数1,然后将color赋值为Color.White,然后将赋值为

当涉及到许多构造函数并包含对象时,这个问题就变得合理了。

有没有办法处理这些不必要的步骤?我想我遗漏了一些基本的东西。

public class Image
{
    Texture2D texture;
    Rectangle frame;
    Rectangle offsetBound;
    Color color;
    // Constructor 1
    public Image(Texture2D texture, Rectangle frame, Rectangle offsetBound)
    {
        this.texture = texture;
        this.frame = frame;
        this.offsetBound = offsetBound;
        this.color = Color.White;  // This is irrelevant
    }
    // Constructor 2
    public Image(Texture2D texture, Rectangle frame, Rectangle offsetBound, Color color)
        : this(texture, frame, offsetBound)
    {
        this.color = color;
    }
}

通过构造函数重载赋值属性

你可以这样重新排列:

// Constructor 1
public Image(Texture2D texture, Rectangle frame, Rectangle offsetBound)
    : this(texture, frame, offsetBound, Color.White)
{ }
// Constructor 2
public Image(Texture2D texture, Rectangle frame, Rectangle offsetBound, Color color)        
{
    this.texture = texture;
    this.frame = frame;
    this.offsetBound = offsetBound;
    this.color = color;
}

您还可以执行下一个操作,去掉第一个构造函数,只留下一个构造函数,这样可以提供相同的结果:

public Image(Texture2D texture, Rectangle frame, Rectangle offsetBound, Color? col = null)
{
    this.color = col ?? Color.White;
    this.texture = texture;
    this.frame = frame;
    this.offsetBound = offsetBound;
}

通过使用可选参数,您可以获得与使用两个参数相同的结果,如果用户不想提供颜色,只需不要,它将被放置默认的color . white .