Question

Je voudrais faire référence à une propriété sur un objet dans un initialiseur d'objet. Le problème est que la variable n'existe pas encore, donc je ne peux pas faire référence comme normal (object.method). Je ne sais pas s'il y a un mot-clé pour référencer l'objet dans la création lors de l'initialisation de l'objet.

Quand je compile le code suivant, je reçois l'erreur - « Le nom « Largeur »n'existe pas dans le contexte. Je comprends pourquoi Je reçois cette erreur, mais ma question est: Y at-il une syntaxe pour faire

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
};

Je voudrais faire référence aux propriétés « Largeur », « hauteur » et « zone » en termes de « mySquare ».

Était-ce utile?

La solution

Vous ne pouvez pas faire cela comme il est écrit, mais vous pouvez définir la propriété Pos à faire la même chose. Au lieu de

public Vector2 Pos { get; set; }

Pour ce faire,

public Vector2 Pos
{
    get 
    {
        return new Vector2(Width, Height) * Area;
    }
}

Bien sûr, toute la place a la même définition pour Pos. Je ne sais pas si c'est ce que vous voulez.

Modifier

D'après vos commentaires, je suppose que vous voulez être en mesure de préciser la valeur de Pos deferently pour les différentes places. Voici une autre idée. Vous pouvez ajouter un troisième argument au constructeur qui prend un délégué, puis le constructeur pourrait utiliser en interne le délégué pour définir la propriété. Ensuite, lorsque vous créez un nouveau carré que vous venez de passer dans un lambda pour l'expression que vous voulez. Quelque chose comme ceci:

public Square(int width, int height, Func<Square, Vector2> pos) 
{ 
    Width = width; 
    Height = height; 
    Pos = pos(this);
}

puis

Square mySquare = new Square(4, 5, sq => new Vector2(sq.Width, sq.Height) * sq.Area);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top