Я учил себя C #, и я только учусь, как использовать пользовательские типы данных. Программа, которую я пишу, производит несколько пар координатных пар. Я подумал, что было бы неплохо создать тип данных, содержащий каждый набор (x1, x2, y1, y2), а также несколько других переменных, относящихся к этому набору. Тем не менее, программа будет генерировать более одного массива наборов координат (разных категорий), поэтому отслеживать вещи по-прежнему сложно. Затем я разбил его далее на категории и поместил каждую категорию в третий тип, который действует как третий уровень, который затем помещается в список.
Каждый «уровень» элементов имеет некоторые свойства, характерные для этого уровня, но до этого препятствия у меня не было необходимости обмениваться данными в иерархии. Проблема возникла, когда я понял, что мне нужно изменить наборы пар координат, используя смещение, и каждое смещение зависит от родительского типа данных. Я могу изменить код get {} так, чтобы он возвращал данные плюс смещение (я назвал это «перекосом»), но не в том случае, если смещение находится за пределами самого класса типа данных. Я попытался установить значение в родительском типе данных (даже в общедоступном статическом), но ребенок по какой-то причине не смог его прочитать.
Единственный способ, которым я знаю, как сделать эту работу, - установить свойство в каждом наборе координат, но их может быть тысячи. Значение является уникальным для родителя, но все дети должны использовать его, так что это кажется расточительным, учитывая, что будет много других вычислений. Моя другая мысль состояла в том, чтобы сохранить массив смещений и добавить его в места, где получены значения. Но это не так чисто, как содержать его внутри самого типа данных, и поэтому это приведет к путанице. Есть ли другой способ сделать это?
Вот как выглядит код:
public class SlotData
{
private double _x1, _x2, _y1, _y2;
public double X1
{
get { return _x1; }
set { _x1 = value; }
}
public double X2
{
get { return _x2; }
set { _x2 = value; }
}
public double Y1
{
get { return _y1; }
set { _y1 = value; }
}
public double Y2
{
get { return _y2; }
set { _y2 = value; }
}
}
public class ClientInfo
{
public static double _skewX, _skewY;
public SlotGroup1 Group1
{
get;
set;
}
public SlotGroup2 Group2
{
get;
set;
}
public SlotGroup3 Group3
{
get;
set;
}
}
public class SlotGroup1
{
public SlotData Slot1
{
get;
set;
}
public SlotData Slot2
{
get;
set;
}
}