我想引用对象初始值设定项中对象的属性。问题是变量尚不存在,所以我不能像普通(object.method)那样引用它。我不知道在对象初始化期间是否有一个关键字在创建中引用该对象。
当我编译以下代码时,我得到错误 - '名称'宽度'在上下文中不存在。我理解为什么我收到此错误,但我的问题是:是否有任何语法可以执行此操作?
public class Square
{
public float Width { get; set; }
public float Height { get; set; }
public float Area { get { return Width * Height; } }
public Vector2 Pos { get; set; }
public Square() { }
public Square(int width, int height) { Width = width; Height = height; }
}
Square mySquare = new Square(5,4)
{
Pos = new Vector2(Width, Height) * Area
};
我想用“mySquare”来引用属性“Width”,“Height”和“Area”。
答案 0 :(得分:1)
您无法按照书面形式执行此操作,但您可以定义Pos
属性来执行相同的操作。而不是
public Vector2 Pos { get; set; }
这样做
public Vector2 Pos
{
get
{
return new Vector2(Width, Height) * Area;
}
}
当然,任何方格都有Pos
的相同定义。不确定这是不是你想要的。
修改强>
根据您的评论,我认为您希望能够为不同的Square指定Pos的值。这是另一个想法。您可以向构造函数添加第三个参数,该构造函数接受委托,然后构造函数可以在内部使用委托来设置属性。然后,当您创建一个新的方块时,您只需传入一个lambda来表达您想要的表达式。像这样:
public Square(int width, int height, Func<Square, Vector2> pos)
{
Width = width;
Height = height;
Pos = pos(this);
}
然后
Square mySquare = new Square(4, 5, sq => new Vector2(sq.Width, sq.Height) * sq.Area);