0

オブジェクト初期化子内のオブジェクトのプロパティを参照したいと思います。問題は、変数がまだ存在していないため、通常のように参照できないことです(object.method)。オブジェクトの初期化中に作成時にオブジェクトを参照するためのキーワードがあるかどうかはわかりません。

次のコードをコンパイルすると、エラーが発生します-'名前'Width'はコンテキストに存在しません。このエラーが発生する理由は理解していますが、私の質問は次のとおりです。これを行うための構文はありますか?

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。それがあなたが望むものかどうかわかりません。

編集

あなたのコメントに基づいて、異なる正方形に対して Pos の値を個別に指定できるようにしたいと考えています。ここに別のアイデアがあります。デリゲートを受け取るコンストラクターに 3 番目の引数を追加すると、コンストラクターは内部でデリゲートを使用してプロパティを設定できます。次に、新しい正方形を作成するときに、必要な式のラムダを渡すだけです。このようなもの:

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 に答える