Как связать одну переменную с другой

#c#

#c#

Вопрос:

У меня есть этот фрагмент кода:

 Brick brick1= new Brick(parent.X - 1,parent.Y);
  

X amp; Y — целые числа,

В основном я хочу сделать следующее: когда изменяется x родительского кирпича, изменяется x из brick1 , где значение не имеет значения parent.X , brick1.X всегда будет равно parent.X - 1

Есть ли способ добиться этого?

Комментарии:

1. Как бы помогли указатели? В C # классы — это ссылочные типы, которые действуют так же, как указатели.

2. Что вам нужно, так это ссылка на другой кирпич и геттер, который вычисляет X на лету.

3. Вам нужно будет сделать класс кирпича осведомленным о его родителе, добавить поле родительского типа. И измените конструктор, чтобы вы могли использовать новый кирпич (родительский).

Ответ №1:

Предполагая, что Brick это не структура, вы могли бы это сделать. Вы также можете сделать это с помощью наследования с помощью класса ChildBrick, но если вам не нужно дополнительное усложнение, по крайней мере, на мой взгляд, проще просто разрешить Brick иметь родителя, который является a Brick , и добавить конструктор для родителя. Затем, если вы извлекаете значение, и его нужно вычислить из родительского элемента, вы просто проверяете, есть ли у вас родительский элемент, и вычисляете соответственно.

 class Brick
{
    private Brick _parent;
    private int _x;
    private int _y;

    Brick(Brick parent) {_parent = parent);}
    Brick(int x, int y)
    {
        _x = x;
        _y=y;
    }

    public int X
    {
        get
        {
            if (_parent != null) return _parent.X - 1;
            return _x;
        }
    }
    public int Y
    {
        get
        {
            if (_parent != null) return _parent.Y;
            return _y;
        }
    }
}
  

Ответ №2:

Просто сделайте brick1 производным классом с вычисляемым свойством только для чтения

  public class childBrick: Brick
 {
     public new float X 
     {
         get { return base.X - 1.0 } 
         private set { base.X = value; }
     }
     public static Brick Make( float x, float y)
     {
         return new childBrick
         { 
            X = x;
            Y = y;
         }
     }
 }
  

используйте это так

  Brick brick1 = childBrick.Make(parent.X - 1,parent.Y);
  

Комментарии:

1. не уверен, что наследование — это то, что нужно OP. в его коде parent , похоже, не родительский класс, а объект того же класса с родительскими отношениями с brick1

2. но поскольку childBrick — это Кирпич, он будет отлично работать, чтобы достичь того, чего он хочет