Проблема:
(затем Взломанное решение , затем Упрощенное решение )
В настоящее время объявлено два типа данных, и один из них являетсявложенные, поэтому вы можете объявлять переменные, используя каждый из типов данных следующим образом:
frameLimits.Max highest = new frameLimits.Max();
highest.Y = 5;
IntelliSense показывает: highest.
frameLimits limits = new frameLimits();
// no members exist on the frameLimits type, so nothing to access.
IntelliSense показывает: limits.
IntelliSense может помочь разобраться.
Вложенная структура не может быть использована так, как вы изначально пытались, потому что, как другие уже указывали до меня, вы пытаетесь использовать типы вместо экземпляров этих типов.
Взломанное решение
Если я добавлю поле экземпляра MaxValue в вашу структуру Max, то я могу приблизиться к тому, что вы хотели.Это позволит коду вызывающего абонента быть:
frameLimits limits = new frameLimits();
limits.MaxValue.Y = 5;
Однако это действительно сложный способ сделать это и не рекомендуется.
Модифицированная структура выглядит следующим образом:
public struct frameLimits
{
public struct Max
{
private int yval;
public int Y
{
get
{
return yval;
}
set
{
yval = value;
}
}
}
public Max MaxValue;
}
Упрощенное решение
Вы можете удалить внутреннюю структуру просто, но вы по-прежнему имеете некоторые ограничения со структуройи именно поэтому я реализую значение по умолчанию 220, как и я.
Новый код вызывающего абонента:
FrameLimits limits = new FrameLimits();
Console.Write( limits.MaxY ); // prints 220
limits.MaxY = 5;
Эта структура в некоторой степени упрощена (удаленная вложенная структура):
public struct FrameLimits
{
private int? yval;
public int MaxY
{
get
{
return yval.HasValue ? yval.Value : 220;
}
set
{
yval = value;
}
}
}