0

我想在对象初始化程序中引用对象的属性。问题是该变量尚不存在,因此我无法像正常一样引用它(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”。

4

1 回答 1

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);
于 2011-05-02T07:17:22.607 回答