通过构造函数重载赋值属性
本文关键字:赋值 属性 重载 构造函数 | 更新日期: 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 .