И добавить несколько файлов библиотеки, которые вы можете записать, как показано ниже:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Фильтрация E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Graphics E: / DebugLibrary / VTK / GUISupport / Qt E: / DebugLibrary / VTK / Hybrid E: / DebugLibrary / VTK / Imaging E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel E: / DebugLibrary / VTK / Rendering E: / DebugLibrary / VTK / Утилиты E: / DebugLibrary / VTK / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
LIBS * = -LE: / DebugLibrary / VTKBin / bin / release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkzpat - lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
blockquote>
Когда вы пишете a = value
, вы снова вызываете установщик свойств.
Чтобы использовать неавтоматические свойства, необходимо создать отдельное закрытое резервное поле, например:
ConstraintSet a;
public ConstraintSet A { get { return a; } set { a = value; } }
Вы не объявили поддерживающую переменную - у вас есть свойство, геттеры и сеттеры которого вызывают сами себя. Мне не ясно , почему первая форма не поддерживается Unity - это означает, что, возможно, эквивалент также не будет поддерживаться, но в основном это:
private ConstraintSet aValue;
public ConstraintSet a { get { return aValue; } set { aValue = value; } }
Обычно у меня более традиционное имя, конечно - что означает, что вы можете обойтись без бита «value»:
private ConstraintSet constraints;
public ConstraintSet Constraints
{
get { return constraints; }
set { constraints = value; }
}
Чтобы подробнее объяснить, почему ваша текущая вторая форма генерирует исключение StackOverflowException
, вы всегда должны помните, что свойства - это в основном замаскированные методы. Ваш сломанный код выглядит следующим образом:
public ConstraintSet get_a()
{
return get_a();
}
public void set_a(ConstraintSet value)
{
set_a(value);
}
Надеюсь, очевидно, почему эта версия взрывает стек. Измененная версия просто устанавливает переменную вместо повторного вызова свойства, поэтому это выглядит так, когда расширен:
private ConstraintSet aValue;
public ConstraintSet get_a()
{
return aValue;
}
public void set_a(ConstraintSet value)
{
aValue = value;
}
Вам нужна частная резервная переменная в вашем общедоступном свойстве:
private ConstraintSet _a;
public ConstraintSet a { get { return _a; } set { _a = value; } }
Вы не можете использовать одно и то же имя переменной внутри геттера и сеттер.
Это приведет к его вызову и, в конечном итоге, к переполнению стека. Слишком много рекурсии.
Вам понадобится вспомогательная переменная:
private ConstraintSet _a;
public ConstraintSet a { get { return _a; } set { _a = value; } }