#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
, похоже, не родительский класс, а объект того же класса с родительскими отношениями с brick12. но поскольку childBrick — это Кирпич, он будет отлично работать, чтобы достичь того, чего он хочет